我好几天都在寻找类似的东西。我正在尝试根据列表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。
答案 0 :(得分:22)
答案 1 :(得分:3)
答案 2 :(得分:2)
如果要从其他列表(listB
)中删除对象列表(listA
),请使用:
listA = listA.Except(listB).ToList()
请记住使用ToList()将IEnumerable<Obj>
转换为List<Obj>
。
答案 3 :(得分:0)
根据MSDN(http://msdn.microsoft.com/en-us/library/bhkz42b3.aspx)上的文档,contains使用默认的Equality comparer来确定相等性,因此您可以在Obj类上使用IEquatable的Equals方法使其工作。 HiperiX提到上面的参考比较。
如何添加IEquateable接口:http://msdn.microsoft.com/en-us/library/ms131190.aspx