【问题标题】:how to select the highest rating item if the Ids are the same (distinct)?如果 ID 相同(不同),如何选择评分最高的项目?
【发布时间】:2016-12-01 04:39:07
【问题描述】:

我有两个列表,其中包含 Id、Type 和 Rating。 我使用 moreLinq 将这两个列表合并并通过 Id 区分它们。但是,我得到了稍后添加到列表中的评级。我希望能够用 Id 区分它们并获得评分最高的项目。

item1.Union(item2).DistinctBy(e => e.Id);
where item1 is a baseItem of 
BaseItem{
     Id, 
     Type,
     Rating,
}

如果它们的 Id 相同,它总是给我 item2 的评级。

【问题讨论】:

    标签: c# distinct


    【解决方案1】:

    您可以对第一个商品进行分组、订购和取走(您不再需要MoreLinq):

    var result = item1.Union(item2)
                      .GroupBy(e => e.id)
                      .Select(g => 
                          g.OrderByDescending(e => e.Rating).First()
                      );
    

    【讨论】:

    • 这是一个伟大的。我非常专注于尝试做不同的功能,并没有考虑这种可能性。感谢您的回答,但我将 First() 更改为 FirstOrDefault()。
    • @ChitKhine 没问题,很乐意提供帮助。关于FirstOrDefault() - 您保证在一个分组中始终至少有一个项目(否则该分组将不存在)。对我来说,写FirstOrDefault() 可能会误导读者——尽管我承认这可能是一个偏好问题,没有真正的影响
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 2013-11-04
    相关资源
    最近更新 更多