Возможный дубликат:
Список разделов LINQ в списки из 8 участников.
У меня есть IEnumerable<T>
, и я хотел бы преобразовать его в IEnumerable<List<T>>
, где каждый список представляет собой набор элементов в том же порядке, что и исходный перечислитель. Каждая партия должна состоять из batchSize
элементов, за исключением последней партии, которая должна содержать оставшиеся элементы, поэтому она может быть меньше batchSize
.
Базовое хранилище не является базой данных или другим хранилищем, где я могу передать пакетную обработку на более низкий уровень системы. Вместо этого мне нужно собирать пакеты самостоятельно, потому что это поток объектов, которые я могу извлекать только по одному за раз.
Последовательность очень длинная, и выборка занимает некоторое время, поэтому я не могу заранее упаковать все перечисляемое в List<T>
или массив. Вместо этого я хотел бы получить batchSize
результатов, а затем сразу же начать обработку первого пакета.
Позже я могу решить сделать выборку асинхронной по отношению к обработке (чтобы обработка пакета 1 и выборка пакета 2 могли происходить параллельно), но сейчас я просто ищу однопоточное решение.
Любые предложения о том, как сделать это пакетное, потоковое перечисление эффективно и элегантно? В идеале я хотел бы упаковать его в метод расширения, который я могу использовать повторно, например.
public static IEnumerable<T> Batch<T>(this IEnumerable<T> source, int count);