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

ser*_*hio 3 .net linq

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

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

lc.*_*lc. 8

看一眼 List<T>.RemoveAll

aList.RemoveAll(x => bList.Contains(x))
Run Code Online (Sandbox Code Playgroud)

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


Ada*_*son 7

最简单的方法是这样做:

foreach(var item in bList) aList.Remove(item);
Run Code Online (Sandbox Code Playgroud)

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

如果通过"使用LINQ",则意味着使用LINQ来确定某个项目aList是否在bList,这是不必要的.

只有满足以下两个条件,LINQ解决方案才会更有效:

  1. aList 与...相比非常小 bList
  2. 在所有的项目aList,在同样bList是在一开始bList

  • @serhio:这不是LINQ,它只是使用匿名委托和(有争议的)`ForEach`函数.使用它没有任何好处. (3认同)