使用LINQ从ObservableCollection Source中删除元素

时间:2012-07-16 08:17:14

标签: c# linq foreach

  

实际上,它更接近于:
  RemoveAll for ObservableCollections?

<击>

<击>
<击>   

可能重复:
  using LINQ to remove objects within a List<T>
  

这是我正在使用的代码,但它的可读性不高。我是否可以使用LINQ缩短下面的代码,同时仍具有相同的功能?

int index = 0;
int pos = 0;

foreach (var x in HomeViewModel.RecentPatients)
{
   if (x.PID == p.PID)
       pos = index;
   else
       index++;

}

HomeViewModel.RecentPatients.RemoveAt(pos); 

2 个答案:

答案 0 :(得分:5)

重复关闭混淆的道歉。这个问题和明确的答案将让您获得从可观察集合中删除的扩展方法支持:

RemoveAll for ObservableCollections?

它不会支持from x in y语法,但它会让你这样做:

var c = new ObservableCollection<SelectableItem>();
c.Remove(x => x.IsSelected);

但是,使用支票x.PID == p.PID和关于您的其他问题的说明...如果您实际上想要删除两个列表中的项目,这可能不是最佳选择。

Except扩展方法将生成一个可枚举的项目,这些项目不包括作为参数提供的可枚举项目,在您的情况下是第二个列表。此方法不会改变现有的可枚举,就像大多数操作返回一个新的一样,因此您需要将其设置为新的ObservableCollection

答案 1 :(得分:4)

你可以试试这个。

var toRemove = HomeViewModel.RecentPatients.Where(x=>x.PID == pid).ToList();
foreach (var item in toRemove)
    HomeViewModel.RecentPatients.Remove(item);