关于c#:使用LINQ从ObservableCollection Source中删除元素

Using LINQ to delete an element from a ObservableCollection Source

本问题已经有最佳答案,请猛点这里访问。

Actually, it is a closer duplicate of:
RemoveAll for ObservableCollections?

<罢工>

Possible Duplicate:
using LINQ to remove objects within a List

这是我正在使用的代码,但它不太可读。在仍然具有相同功能的情况下,我可以使用LINQ来缩短下面的代码吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
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);


为重复的关闭混乱道歉。这个问题和有标记的答案将使您获得从可观察集合中删除的扩展方法支持:

移除所有可观察的收藏?

它不支持from x in y语法,但允许您这样做:

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

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

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


你可以试试这个。

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