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?
aList.RemoveAll(x => bList.Contains(x))
FWIW,如果这很重要,这还将删除 中aList包含的所有对象bList,而不仅仅是 中每个bList对象的第一个实例。aList
最简单的方法是这样做:
foreach(var item in bList) aList.Remove(item);
Remove如果该项目不在列表中,则不执行任何操作。
如果“使用 LINQ”是指使用 LINQ 来确定 in 中的项目aList是否在 中bList,则没有必要。
只有当这两个条件都为真时,LINQ 解决方案才会更有效:
aList相比起来非常小bListaList也bList都在开头bList您可以使用Except扩展方法:
var result = aList.Except(bList);
请注意,IEqualityComparer<T>如果您需要自定义相等检查,您也可以将 an 作为第二个参数传递。
查看 LINQ“除外”扩展:
http://www.dotnetperls.com/except
除了从集合中减去元素。此扩展方法位于 .NET Framework 的 System.Linq 命名空间中。它本质上是从另一个集合中减去一个集合中的所有元素。