我有一个对象List<T>
的列表(aList
)和另一个列表bList
。
如何使用Linq删除aList
中包含的bList
中的所有对象?
答案 0 :(得分:8)
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
相比,bList
非常小
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命名空间中。它基本上是从另一个集合中减去所有元素。