繁体   English   中英

如何从基于另一个列表的元素和条件的一个列表中删除元素?

[英]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 } }; 

varexceptedItems = list1.Select(x => x.id).Except(list2.Select(y => y.id))。ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM