仅从集合中选择唯一值

时间:2012-08-24 15:38:34

标签: c# linq

我有一组用户对象,但需要根据用户ID返回不同用户的列表。

所以我想知道是否可以根据用户对象的给定属性仅选择不同的值?

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

用户对象:

UserID
UserName

由于

2 个答案:

答案 0 :(得分:2)

使用morelinq's DistinctBy()方法。

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

或者通过对您想要获得区别的内容进行分组并获取该组中的第一项来自行制作查询。

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

答案 1 :(得分:1)

这可以通过很容易地使用Hashset来解决。要做到这一点,只需确保您的User类具有Equals和GetHashCode的覆盖,并且您应该设置。

编辑:正如DavidM在下面提到的那样,如果这是User对象的正常比较情况,那么覆盖一个类的equals和gethashcode是值得的。如果没有,那么可以使用自定义比较器实例化Hashsets,我建议使用此方法。