我有2個不同類的集合。 MyClass1 - 名稱,年齡等MyClass2 - 尼克,年齡等沒有IEqualityComparer實現的LINQ
我想找到此收藏集除外。喜歡的東西
list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);
但我cannt編寫代碼,需要實現與接口的IEqualityComparer我自己比較器類和它看起來非常的開銷爲這個小任務。有沒有優雅的解決方案?
我有2個不同類的集合。 MyClass1 - 名稱,年齡等MyClass2 - 尼克,年齡等沒有IEqualityComparer實現的LINQ
我想找到此收藏集除外。喜歡的東西
list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);
但我cannt編寫代碼,需要實現與接口的IEqualityComparer我自己比較器類和它看起來非常的開銷爲這個小任務。有沒有優雅的解決方案?
Except
確實無法使用兩種不同的序列類型。我建議而是使用類似:
var excludedNicks = new HashSet<string>(list2.Select(x => x.Nick));
var query = list1.Where(x => !excludedNicks.Contains(x.Name));
(請注意,這不會執行Except
的「獨特」的方面。如果你需要,請告訴我們,我們可以計算出你需要。)
那麼,建立一組所有的暱稱,然後運行。
var nicknames = new HashSet<string>(list2.Select(l2 => l2.Nick));
var newNames = from l1 in list1
where !nicknames.Contains(l1.Name)
select l1;