Как использовать Linq для группировки каждого N количества строк - PullRequest
16 голосов
/ 14 мая 2009

Я не могу найти способ сделать эту работу и надеюсь, что у кого-то есть идея. Упрощенный пример будет иметь список, скажем, целых чисел 1-100, я хочу сгруппировать каждые 3 строки, чтобы результат был 1,2,3 в первой группе, затем 4,5,6 в следующей группе и т. Д. Я знаю, как получить каждую n-ую запись, но мне нужны все записи, чтобы я мог затем агрегировать их, используя first, last, sum, max и т. д.

Спасибо!

Ответы [ 3 ]

33 голосов
/ 14 мая 2009

Этот пример должен работать для запроса нечисловых коллекций. Он проецирует индекс в объект, который нужно сгруппировать, а затем снова удаляет его во время группировки.

var studentQuery2 = students
    .Select((student, index) => new {student, index})
    .GroupBy(g => g.index / 3, i => i.student);
24 голосов
/ 14 мая 2009
var q = Enumerable.Range(0, 100).GroupBy(x => x/3);

Я что-то упустил?

2 голосов
/ 07 апреля 2017

Как насчет более простого подхода:

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

Обновление: Если вы используете значение Key для элемента группы, вам нужно преобразовать перечисляемую группу в список. В противном случае вы получите новый Key каждый раз, когда к нему обращаются.

var index = 0;
var grpOf3s = students.GroupBy(x => index++ / 3).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...