6

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

可能重复:
使用 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); 
4

2 回答 2

5

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

为 ObservableCollections 移除全部?

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

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

但是,通过检查x.PID == p.PID和有关您的其他问题的注释...如果实际上您想删除两个列表中的项目,这可能不是最佳选择。

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

于 2012-07-16T08:27:30.840 回答
4

你可以试试这个。

var toRemove = HomeViewModel.RecentPatients.Where(x=>x.PID == pid).ToList();
foreach (var item in toRemove)
    HomeViewModel.RecentPatients.Remove(item);
于 2012-07-16T08:30:13.523 回答