Linq разделить последовательность на несколько последовательностей - C#
Формулировка задачи:
Имеем последовательсть IEnumerable<T>.
Необходимо "постраничное" чтение, то есть извлекать из этой последовательности, например, 30 элементов, потом еще 30 .... и остаток (меньше 30).
Кол-во элементов в данном случае фиксировано, но хотелось бы чтоб можно было указать как параметр.
Решение задачи: «Linq разделить последовательность на несколько последовательностей»
textual
Листинг программы
public static IEnumerable<IEnumerable<T>> Paginate<T>(this IEnumerable<T> collection, int pageSize)
{
if (collection == null) throw new ArgumentNullException("collection");
if (pageSize < 0) throw new ArgumentOutOfRangeException("pageSize");
var page = new T[pageSize];
int i = 0;
foreach (T item in collection)
{
page[i++] = item;
if (i == pageSize)
{
yield return page;
page = new T[pageSize];
i = 0;
}
}
if (i == pageSize) yield return page;
else yield return page.Take(i).ToArray();
}