2012-08-24 221 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 ... :) –