2012-08-24 129 views
0

我有一組用戶對象,但需要根據用戶標識返回不同用戶的列表。僅從集合中選擇唯一值

所以我想知道是否有可能根據用戶對象的給定屬性選擇不同的值?

Collection<User> users = serializer.Deserialize<Collection<User>>(userCollection); 

用戶對象:

UserID 
UserName 

感謝

+0

什麼是您的收藏對象? System.Collections.ObjectModel.Collection 還是別的? – goric

+1

可能重複的[由linq類的不同屬性](http://stackoverflow.com/questions/2537823/distinct-by-property-of-class-by-linq) –

+0

結帳這篇文章詳述了相同的問題:http ://stackoverflow.com/questions/568347/how-do-i-use-linq-to-obtain-a-unique-list-of-properties-from-a-list-of-objects希望這有助於! –

回答

2

使用morelinq'sDistinctBy()方法。

var distinctUsers = users.DistinctBy(user => user.UserID); 

或水運通過你想獲得的區別,並採取組中的第一個項目是什麼分組對自己的查詢。

var distinctUsers = users.GroupBy(user => user.UserID) 
         .Select(g => g.First()); 
1

這可以通過使用一個HashSet的很容易得到解決。要做到這一點,只需確保您的User類具有Equals和GetHashCode的重寫,並且應該設置。

編輯:正如DavidM在下面提到的,如果這是用戶對象的正常比較情況,則覆蓋equals和gethashcode僅適用於類。如果沒有,那麼Hashsets可以通過自定義比較器實例化,我會建議使用這種方法。

+0

重寫它的Equals和GetHashCode實現只是一個用例對我來說聽起來不是一個好主意... –

+0

@DavidM公平點,但如果這不是正常的比較情況,那麼只是在實例化時使用自定義比較器哈希集。 –

+0

是的,確切地說。如果你編輯這個,那麼這是值得從我+1 ... :) –