LINQ:从列表元素中删除另一个列表中包含的元素

时间:2012-07-17 13:45:15

标签: .net linq

我有一个对象List<T>的列表(aList)和另一个列表bList

如何使用Linq删除aList中包含的bList中的所有对象?

4 个答案:

答案 0 :(得分:8)

查看List<T>.RemoveAll

aList.RemoveAll(x => bList.Contains(x))

FWIW,这也将删除aList中包含的bList中的所有对象,而不仅仅是bList中每个aList对象的第一个实例,如果这很重要的话。

答案 1 :(得分:7)

最简单的方法是:

foreach(var item in bList) aList.Remove(item);
如果项目不在列表中,则

Remove不会执行任何操作。

如果通过“使用LINQ”,则表示使用LINQ来确定aList中的项目是否在bList中,这是不必要的。

只有在以下两个条件都成立的情况下,LINQ解决方案才会更有效:

    aList 相比,
  1. bList非常小
  2. aList中同时位于bList的所有项目都位于bList的最开头

答案 2 :(得分:2)

您可以使用Except扩展名方法:

var result = aList.Except(bList);

请注意,如果需要自定义相等性检查,还可以传递IEqualityComparer<T>作为第二个参数。

答案 3 :(得分:0)

查看LINQ“Except”扩展名:

http://www.dotnetperls.com/except

  

除了从集合中减去元素。此扩展方法位于.NET Framework的System.Linq命名空间中。它基本上是从另一个集合中减去所有元素。