使用Linq从列表中删除

时间:2011-06-09 05:55:15

标签: c# .net linq linq-to-objects

所以,我有一个类A的对象列表,其中包含类List的{​​{1}}个对象

B

我有清单:

class A 
{
  ...
  List<B> bs;
}

如何使用Linq“清理”mainList,通过从listsRemoval中存在的bs(对于mainList中的每个A)中删除所有对象?

我希望我没有把你与这个问题混为一谈。 :)

4 个答案:

答案 0 :(得分:4)

linq本身可能不太合适,但你可以使用它的一些扩展方法。 Linq通常主要用于选择,而不是处理。

mainList.ForEach(x=>x.bs = x.bs.Where(y=>!listForRemoval.Contains(y)).ToList());

答案 1 :(得分:4)

是的,正如其他答案所示,这是可能的。但是,我会选择以下根本不使用LINQ的解决方案:

foreach (var a in mainList) {
    a.bs.RemoveAll(b => listForRemoval.Contains(b));
}

优点:

  • 阅读和理解更容易。
  • 它不比基于LINQ的解决方案 - 实际上,它比更短比基于LINQ的接受答案。
  • 从bs中移除元素,而不是将新列表分配给bs。如果列表也在其他地方使用,这可能会产生更好的性能和/或是必要的。

答案 2 :(得分:2)

foreach (var list in mainList) {
    list.bs = list.bs.Where(b => !listForRemoval.Contains(b)).ToList();
}

答案 3 :(得分:2)

mainList.ForEach(a => a.bs.RemoveAll(b => listForRemoval.Contains(b)));