如何使用LINQ从list1
删除与list2
项目匹配条件的列表项目
我知道如何以简单的foreach
方式进行操作,但是我想使用Linq
样式的单行代码来做到这一点。
如何使用Linq
来做到这一点?
输入列表
list1 = new List(){new object{id = 40},new object{id = 50},new object{id = 60}}
list2 = new List(){new object{id = 400},new object{id = 50},new object{id = 600}}
预期输出应来自
list1
new object{id = 40},new object{id = 60}
答案 0 :(得分:3)
您可以删除以下元素:
list1.RemoveAll(item => list2.Any(item2 => item.Key == item2.Key))
答案 1 :(得分:1)
尝试一下:
var list = list1.RemoveAll(l => list2.Contains(l));
答案 2 :(得分:0)
换一种说法,
var list1 = Provider.FillList<SomeType>();
var list2 = Provider.FillList<SomeType>();
list1.RemoveAll(n=> list2.Exists(o=> o.Key == n.Key));
答案 3 :(得分:0)
您也可以尝试
list1.addRange(list2)
then next line would be a simple list1.Distinct(X=>x.Key1).ToList();
或简单将为
list1.Except(list2,IEqualityComparer);
您将需要实现equals方法以使其工作。
另一种方式是实施联盟
var result = List1.Union(List2, myEqualityComparer);
除了使用相同的逻辑外,还有其他几种方法可以使用链接来欺骗最终结果,其中大多数方法效率低下并且计算时间较长
答案 4 :(得分:0)
我可以用Join语句解决这个问题:
var l = list1.Join(list2, outer => outer.Key, inner => inner.Key, (inner, outer) => outer);
其中outer
是list1,inner
是list2。假设Key
是元素的属性,结果是一个包含所有具有相同Key
的元素的列表。
答案 5 :(得分:0)
以下代码对我有用:
var list1 = new List<a> { new a { id = 40 }, new a { id = 50 }, new a { id = 60 } };
var list2 = new List<a> { new a { id = 400 }, new a { id = 50 }, new a { id = 600 } };