我有一组用户对象,但需要根据用户 ID 返回不同用户的列表。
所以我想知道是否可以根据用户对象的给定属性只选择不同的值?
Collection<User> users = serializer.Deserialize<Collection<User>>(userCollection);
用户对象:
UserID
UserName
谢谢
使用morelinq的 DistinctBy()
方法。
var distinctUsers = users.DistinctBy(user => user.UserID);
或者通过对您想要获得区别的内容进行分组并获取组中的第一项来自行制作查询。
var distinctUsers = users.GroupBy(user => user.UserID)
.Select(g => g.First());
这可以通过使用 Hashset 很容易地解决。为此,只需确保您的 User 类具有对 Equals 和 GetHashCode 的覆盖,并且您应该进行设置。
编辑:正如 DavidM 在下面提到的,仅当这是 User 对象的正常比较情况时,才值得为一个类覆盖 equals 和 gethashcode。如果没有,那么可以使用自定义比较器来实例化 Hashset,我建议采用这种方法。