2011-08-10 29 views
0

我有兩個自定義類型「客戶端」的列表。我必須合併這兩個列表,避免可能或男性重複。
我通過LINQ的嘗試都IEnumerable.Except()方法和「NOT IN」的語句,但返回的列表中有仍然包含在其他列表中的元素:無法從列表中排除包含在Linq中的其他列表中的項目

var dupes = getFirstList().ToList(); //List<Client> 
var search = getUsersList().Cast<Client>().ToList(); //List<Client> 

//The returned items are the same as in original dupes list 
var unique = dupes.Except(search).ToList(); 

//No records are returned, even if debugging I can see that same contactId is in both lists 
var u = from k in normalSearch 
     where !(from d in dupes 
       select d.ContactId) 
       .Contains(k.ContactId) 
     select k; 

爲什麼我不能在兩個列表匹配刪除重複?

編輯:

對於除方法我想我必須實現接口IEquatable讓它具有自定義類型的工作。但是在LINQ語句的情況下,我仍然不明白爲什麼沒有返回記錄,因爲在這種情況下「ContactId」字段是一個int。

回答

1

對於LINQ部分(與之相比,除了這將是緩慢的),你可以試一下

from k in search 
    where !dupes.Any(d => d.ContactId == k.ContactId) 
    select k; 
+0

它的工作原理,謝謝!我認爲在Linq中,我可以「自動」遍歷集合的項目,而不需要使用Any()方法。 – Francesco

1

除了用這種方法檢查引用的相等性,所以這些對象是否具有相同的ContactId或任何其他字段並不重要。 (在你的代碼中使用normalSearch變量,但它不存在定義的地方)

+0

考慮到LINQ的聲明,它應該在這種情況下工作。任何想法爲什麼不返回任何數據?這應該是對列表的正常Linq查詢。 – Francesco

相關問題