我有一个 LINQ 表达式,它按分区对来自 Azure 表存储的客户进行分组。
由于 Azure 一次仅支持最多 100 个实体的批处理操作(并且批处理中的实体具有相同的 PartitionKey),因此我需要每个组最多包含 100 个实体。
//How to complete this LINQ expression
var groups = customers.GroupBy(c => c.PartitionKey)....;
//Do some Azure table storage magic in parallel
Parallel.ForEach(groups , customersInGroup => {...});
如何完成我的 LINQ 表达式,以便每个组最多包含 100 个客户?也就是说......如果客户收集例如。有 142 个具有相同 PartitionKey 的客户,我想创建两个组……一组有 100 个客户,一组有 42 个客户。
最佳答案
“普通” 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 提供程序进行分区,我不确定您会如何进行。
关于c# - 如何创建创建最多 100 个对象的组的 Linq 表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4304173/