我有一组用户对象,但需要根据用户标识返回不同用户的列表。仅从集合中选择唯一值
所以我想知道是否有可能根据用户对象的给定属性选择不同的值?
Collection<User> users = serializer.Deserialize<Collection<User>>(userCollection);
用户对象:
UserID
UserName
感谢
我有一组用户对象,但需要根据用户标识返回不同用户的列表。仅从集合中选择唯一值
所以我想知道是否有可能根据用户对象的给定属性选择不同的值?
Collection<User> users = serializer.Deserialize<Collection<User>>(userCollection);
用户对象:
UserID
UserName
感谢
使用morelinq'sDistinctBy()
方法。
var distinctUsers = users.DistinctBy(user => user.UserID);
或水运通过你想获得的区别,并采取组中的第一个项目是什么分组对自己的查询。
var distinctUsers = users.GroupBy(user => user.UserID)
.Select(g => g.First());
这可以通过使用一个HashSet的很容易得到解决。要做到这一点,只需确保您的User类具有Equals和GetHashCode的重写,并且应该设置。
编辑:正如DavidM在下面提到的,如果这是用户对象的正常比较情况,则覆盖equals和gethashcode仅适用于类。如果没有,那么Hashsets可以通过自定义比较器实例化,我会建议使用这种方法。
重写它的Equals和GetHashCode实现只是一个用例对我来说听起来不是一个好主意... –
@DavidM公平点,但如果这不是正常的比较情况,那么只是在实例化时使用自定义比较器哈希集。 –
是的,确切地说。如果你编辑这个,那么这是值得从我+1 ... :) –
什么是您的收藏对象? System.Collections.ObjectModel.Collection还是别的? –
goric
可能重复的[由linq类的不同属性](http://stackoverflow.com/questions/2537823/distinct-by-property-of-class-by-linq) –
结帐这篇文章详述了相同的问题:http ://stackoverflow.com/questions/568347/how-do-i-use-linq-to-obtain-a-unique-list-of-properties-from-a-list-of-objects希望这有助于! –