В «нормальном» LINQ нет ничего, чтобы сделать это напрямую, но MoreLINQ имеет метод Batch
, который может оказаться полезным:
public static IEnumerable<TResult> Batch<TSource, TResult>
(this IEnumerable<TSource> source, int size,
Func<IEnumerable<TSource>, TResult> resultSelector)
public static IEnumerable<IEnumerable<TSource>> Batch<TSource>
(this IEnumerable<TSource> source, int size)
Обратите внимание, что в вашем случае вы, вероятно, захотите что-то вроде:
var groups = customers.GroupBy(c => c.PartitionKey).Batch(100, p => p.ToList());
так, чтобы возвращенные результаты были немедленно материализованы.
Конечно, это предполагает, что вы используете LINQ to Objects - если вы пытаетесь разделить через другого провайдера LINQ, я не уверен, как бы вы это сделали.