Как использовать Linq для группировки каждого N числа строк

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

Спасибо!

Ответы

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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