[英]How to Remove elements from one List based another list's element and condition?
如何从列表list1
删除列表项,该列表项使用LINQ在条件与列表2项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}
您可以删除以下元素:
list1.RemoveAll(item => list2.Any(item2 => item.Key == item2.Key))
尝试这个:
var list = list1.RemoveAll(l => list2.Contains(l));
换句话说,
var list1 = Provider.FillList<SomeType>();
var list2 = Provider.FillList<SomeType>();
list1.RemoveAll(n=> list2.Exists(o=> o.Key == n.Key));
您也可以尝试
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);
除了使用相同的逻辑外,还有几种方法可以使用链接来欺骗最终结果,其中大多数方法效率低下,计算时间长
我可以用Join语句解决这个问题:
var l = list1.Join(list2, outer => outer.Key, inner => inner.Key, (inner, outer) => outer);
其中outer
是list1, inner
是list2。 结果是一个列表,其中包含具有相同Key
所有元素,并假设Key
是元素的属性。
以下代码为我工作:
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 } };
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.