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
相比起来非常小bList
aList
也bList
都在开头bList
您可以使用Except
扩展方法:
var result = aList.Except(bList);
请注意,IEqualityComparer<T>
如果您需要自定义相等检查,您也可以将 an 作为第二个参数传递。
查看 LINQ“除外”扩展:
http://www.dotnetperls.com/except
除了从集合中减去元素。此扩展方法位于 .NET Framework 的 System.Linq 命名空间中。它本质上是从另一个集合中减去一个集合中的所有元素。