C# 仅从集合中选择唯一值

C# 仅从集合中选择唯一值,c#,linq,C#,Linq,我有一个用户对象集合,但需要根据用户ID返回一个不同用户的列表 所以我想知道是否可以根据用户对象的给定属性只选择不同的值 Collection<User> users = serializer.Deserialize<Collection<User>>(userCollection); 多亏了这可以通过使用Hashset很容易地解决。要做到这一点,只需确保您的用户类对Equals和GetHashCode都有覆盖,并且您应该被设置 编辑:正如DavidM在下面

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

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

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

多亏了

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

编辑:正如DavidM在下面提到的,只有在用户对象的正常比较情况下,重写类的equals和gethashcode才值得。如果没有,则可以使用自定义比较器实例化哈希集,我建议使用此方法。

使用
DistinctBy()
方法

var distinctUsers = users.DistinctBy(user => user.UserID);
或者,根据您想要获得的区别进行分组,并获取组中的第一项,从而自行设计查询

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

仅为一个用例重写Equals和GetHashCode实现对我来说不是个好主意…@DavidM fair point,但如果这不是正常的比较用例,那么在实例化hashset时只需使用自定义比较器。是的,没错。如果你在中编辑这个,那么我认为这值+1…:)查看这篇文章,详细说明同样的问题:希望这有帮助!你的收藏对象是什么?System.Collections.ObjectModel.Collection或其他内容?可能与的重复
var distinctUsers = users.GroupBy(user => user.UserID)
                         .Select(g => g.First());