2009-10-27 61 views
2

C#:我有一個對象集合。 T有2個屬性。屬性A和屬性B.此集合需要遵守的規則是,A和B的值的組合在集合中必須是唯一的。換句話說,A和B需要充當複合主鍵。是否有Linq操作來確定集合中是否有一組屬性具有相同值的項目?

在Linq中有一個操作我可以用來檢查這種情況嗎?我希望它是這樣的

if (items.Select(x => x.Name).Distinct().Count() != items.Select(x => x.Name).Count()) 

上面的語句是我會怎樣檢查是否存在具有重複名稱的集合中的項目,但我不知道如何做到這一點的不止一個屬性。

回答

12

使用匿名類型選擇組合鍵,例如,

int totalCount = items.Count(); 
int distinctCount = items.Select(x => new { x.Name, x.Other }) 
         .Distinct() 
         .Count(); 

匿名類型根據它們的屬性(和類型的這些屬性的默認相等比較器)自動實現平等和哈希碼。

0

只需選擇進入一個新的,匿名對象

var keys = items.Select(x => new { x.Name, x.Other }).ToList(); 

if (keys.Distinct().Count() != keys.Count()) 
{ 
... 
} 
相關問題