3

I have a list (List<T>) of objects aList and another list bList.

How to use Linq to delete all objects from aList contained in bList?

4

4 回答 4

8

看一眼List<T>.RemoveAll

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

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

于 2012-07-17T13:48:08.010 回答
7

最简单的方法是这样做:

foreach(var item in bList) aList.Remove(item);

Remove如果该项目不在列表中,则不执行任何操作。

如果“使用 LINQ”是指使用 LINQ 来确定 in 中的项目aList是否在 中bList,则没有必要。

只有当这两个条件都为真时,LINQ 解决方案才会更有效:

  1. aList相比起来非常小bList
  2. 里面的所有项目aListbList都在开头bList
于 2012-07-17T13:48:14.037 回答
2

您可以使用Except扩展方法:

var result = aList.Except(bList);

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

于 2012-07-17T13:50:10.350 回答
0

查看 LINQ“除外”扩展:

http://www.dotnetperls.com/except

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

于 2012-07-17T13:48:00.677 回答