2011-02-24 49 views
0

我有2個不同類的集合。 MyClass1 - 名稱,年齡等MyClass2 - 尼克,年齡等沒有IEqualityComparer實現的LINQ

我想找到此收藏集除外。喜歡的東西

list1.Exept(list2, (l1,l2) => l1.Name==l2.Nick);

但我cannt編寫代碼,需要實現與接口的IEqualityComparer我自己比較器類和它看起來非常的開銷爲這個小任務。有沒有優雅的解決方案?

回答

2

Except確實無法使用兩種不同的序列類型。我建議而是使用類似:

var excludedNicks = new HashSet<string>(list2.Select(x => x.Nick)); 
var query = list1.Where(x => !excludedNicks.Contains(x.Name)); 

(請注意,這不會執行Except的「獨特」的方面。如果你需要,請告訴我們,我們可以計算出你需要。)

1

那麼,建立一組所有的暱稱,然後運行。

var nicknames = new HashSet<string>(list2.Select(l2 => l2.Nick)); 
var newNames = from l1 in list1 
       where !nicknames.Contains(l1.Name) 
       select l1; 
相關問題