[英]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.