2016-10-18 58 views
1

linq group中是否有某种方式按Id,Order按降序排列,然后选择每个分组的前5位?现在我有一些如下所示的代码,但我用.Take(5),它显然选择前5名,无论分组。Linq - 按ID排序,按顺序然后选择排序前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 
      }) 

回答

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>>。如果你想扁平化,用SelectMany替换Select

+0

我用你的初步答案与selectmany,它完美的作品。感谢您的帮助! –

+0

@BadDub - 你是非常欢迎:) –

+1

我正在等待下去的时间:) –

相关问题