使用LINQ从ObservableCollection Source中删除元素

Sup*_*den 6 c# linq foreach

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

可能重复:
使用LINQ删除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); 
Run Code Online (Sandbox Code Playgroud)

Ada*_*rth 5

对复制关闭混淆的道歉.此问题和标记答案将允许您从可观察集合中删除扩展方法:

RemoveAll for ObservableCollections?

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

var c = new ObservableCollection<SelectableItem>();
c.Remove(x => x.IsSelected);
Run Code Online (Sandbox Code Playgroud)

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

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