如何使用Linq对每N行进行分组

时间:2009-05-13 20:41:13

标签: c# linq group-by

我无法找到一种方法来完成这项工作并希望有人有一个想法。一个简化的例子是有一个整数列表1-100,我想分组每3行所以结果将是1,2,3在第一组然后4,5,6在下一组等我知道如何得到每一条记录,但我需要的是所有记录,所以我可以使用first,last,sum,max等聚合它们。

谢谢!

3 个答案:

答案 0 :(得分:33)

此示例适用于查询非数字集合。它将索引投影到要分组的对象中,然后在分组期间再次将其删除。

var studentQuery2 = students
    .Select((student, index) => new {student, index})
    .GroupBy(g => g.index / 3, i => i.student);

答案 1 :(得分:24)

var q = Enumerable.Range(0, 100).GroupBy(x => x/3);

我错过了什么吗?

答案 2 :(得分:2)

如何更简单的方法:

var index = 0;
var grpOf3s = students.GroupBy(x => index++ / 3);

<强>更新 如果您使用组项的Key值,则需要将可枚举组转换为列表。否则,每次访问时都会得到不同的Key

var index = 0;
var grpOf3s = students.GroupBy(x => index++ / 3).ToList();