【问题标题】:Linq - Group By Id, Order By and Then select top 5 of each groupingLinq - Group By Id, Order By 然后选择每个分组的前 5 个
【发布时间】:2016-10-18 21:20:47
【问题描述】:

linq group By Id 中是否有某种方式,按降序排序,然后选择每个分组的前 5 个?现在我有一些如下所示的代码,但我使用了.Take(5),它显然选择了前 5 个而不考虑分组。

Items = list.GroupBy(x => x.Id)
            .Select(x => x.OrderByDescending(y => y.Value))
            .Select(y => new Home.SubModels.Item {
                Name= y.FirstOrDefault().Name,
                Value = y.FirstOrDefault().Value,
                Id = y.FirstOrDefault().Id
            })

【问题讨论】:

    标签: c# linq group-by take


    【解决方案1】:

    你快到了。在Select 语句中使用Take

    var items = list.GroupBy(x => x.Id)   
                    //For each IGrouping - order nested items and take 5 of them           
                    .Select(x => x.OrderByDescending(y => y.Value).Take(5))
    

    这将返回一个IEnumerable<IEnumerable<T>>。如果您希望它变平,请将 Select 替换为 SelectMany

    【讨论】:

    • 我将您的初始答案与 selectmany 一起使用,并且效果很好。感谢您的帮助!
    • 我在等时间下去 :)
    猜你喜欢
    • 2011-06-28
    • 2017-02-06
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多