【问题标题】:Selecting only unique values from collection仅从集合中选择唯一值
【发布时间】:2012-08-20 04:50:24
【问题描述】:

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

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

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

用户对象:

UserID
UserName

谢谢

【问题讨论】:

标签: c# linq


【解决方案1】:

使用morelinq'sDistinctBy()方法。

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

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

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

【讨论】:

    【解决方案2】:

    这可以通过使用 Hashset 很容易地解决。为此,只需确保您的 User 类具有对 Equals 和 GetHashCode 的覆盖,并且您应该进行设置。

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

    【讨论】:

    • 仅针对一个用例覆盖其 Equals 和 GetHashCode 实现对我来说听起来不是一个好主意...
    • @DavidM 公平点,但如果这不是正常的比较情况,那么在实例化哈希集时只需使用自定义比较器。
    • 是的,完全正确。如果您在其中进行编辑,那么我值得 +1... :)
    猜你喜欢
    • 1970-01-01
    • 2013-06-09
    • 2014-07-14
    • 2012-03-27
    • 1970-01-01
    • 2012-01-24
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多