LINQ - 按组限制大小

时间:2016-03-13 23:22:14

标签: c# linq

在下面的代码中,我试图将每个组中的最后五个元素作为单个列表返回,如下图所示。下面的代码无法实现这一点,而是将原始数据集(范围为0-19)作为List返回。

如何更改以下代码以返回下图所示的列表?

void Main()
{ 
 var dataSet = Enumerable.Range(0, 20);
 var elementsInEachGroup = 5;

 var answer = dataSet.GroupBy(e =>
     new
     {
       oddEven = e % 2,
       e
     })
   .SelectMany(group => group.Skip(Math.Max(0, group.Count() - elementsInEachGroup)))
   .ToList();   

 answer.Dump();
}

answer

1 个答案:

答案 0 :(得分:3)

您的GroupBy表达式包含元素本身,因此每个组只包含一个项目。从e表达式中删除GroupBy,它会在图片中显示结果。

.GroupBy(e =>
    new
    {
        oddEven = e % 2
    })

或更简单

.GroupBy(e => e % 2)