Вам не нужно писать код. Используйте MoreLINQ Пакетный метод, который поставляет исходную последовательность в размерные ведра (MoreLINQ доступен в виде пакета NuGet, который вы можете установить):
int size = 10;
var batches = sequence.Batch(size);
Что реализовано как:
public static IEnumerable> Batch(
this IEnumerable source, int size)
{
TSource[] bucket = null;
var count = 0;
foreach (var item in source)
{
if (bucket == null)
bucket = new TSource[size];
bucket[count++] = item;
if (count != size)
continue;
yield return bucket;
bucket = null;
count = 0;
}
if (bucket != null && count > 0)
yield return bucket.Take(count);
}