从另一个列表中删除对象列表

本文关键字:列表 对象 删除 另一个 | 更新日期: 2023-09-27 18:10:24

我已经找了好几天了。我正试图根据列表b从一个更大的列表a中删除所有元素

假设我得到一个包含100个具有不同IDS的元素的一般列表,而我得到另一个包含特定元素的列表,只有10条记录。我需要从第一个列表中删除所有不存在于第二个列表中的元素。

我将尝试向代码展示我实际上不知道它是如何工作的

List<Obj> listA = new List<Obj>(); 
List<Obj> listB = new List<Obj>(); 
//here I load my first list with many elements
//here I load my second list with some specific elements
listA.RemoveAll(x => !listB.Contains(x));

我不知道为什么,但它不工作。如果我用List<int>类型尝试这个例子,它工作得很好,但我想用我的对象来做。这个对象有一个ID,但是我不知道如何在LINQ语句中使用这个ID

从另一个列表中删除对象列表

您需要比较id:

listA.RemoveAll(x => !listB.Any(y => y.ID == x.ID));

列表(T)。RemoveAll

我相信你可以使用Except扩展来做到这一点。

var result = listA.Except(listB)

参考:http://www.dotnetperls.com/except

如果你想从另一个列表(listA)中删除一个对象列表(listB),使用:

listA = listA.Except(listB).ToList()

请记住使用ToList()将IEnumerable<Obj>转换为List<Obj>

现在谁在看这个?我认为var result = listA.Intersect(listB)将给出两个列表中共同值的结果。

根据MSDN (http://msdn.microsoft.com/en-us/library/bhkz42b3.aspx)上的文档,contains使用默认的相等比较器来确定相等性,因此您可以在Obj类上使用IEquatable的Equals方法来使其工作。HiperiX提到了上面的参考比较。

如何添加适当的界面:http://msdn.microsoft.com/en-us/library/ms131190.aspx