24

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

谢谢!

4

3 回答 3

42

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

var studentQuery2 = students
    .Select((student, index) => new {student, index})
    .GroupBy(g => g.index / 3, i => i.student);
于 2009-05-13T20:58:39.717 回答
31
var q = Enumerable.Range(0, 100).GroupBy(x => x/3);

我错过了什么吗?

于 2009-05-13T20:53:04.313 回答
2

一个更简单的方法怎么样:

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

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

var index = 0;
var grpOf3s = students.GroupBy(x => index++ / 3).ToList();
于 2017-04-07T14:09:47.943 回答