为了账号安全,请及时绑定邮箱和手机立即绑定

在Linq中创建批处理

在Linq中创建批处理

C#
慕尼黑5688855 2019-06-26 17:10:43
在Linq中创建批处理有人能建议在Linq中创建一定大小的批次吗?理想情况下,我希望能够在一定数量的块中执行操作。
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

你不需要写任何代码。使用MoreLINQ批处理方法,它将源序列分批到大小相同的桶中(MoreLINQ可作为可以安装的NuGet包使用):

int size = 10;var batches = sequence.Batch(size);

其实施方式是:

public static IEnumerable<IEnumerable<TSource>> Batch<TSource>(
                  this IEnumerable<TSource> 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);}


查看完整回答
反对 回复 2019-06-26
?
largeQ

TA贡献2039条经验 获得超7个赞

如果你一开始sequence定义为IEnumerable<T>,并且您知道可以安全地多次枚举它(例如,因为它是一个数组或一个列表),您只需使用这个简单的模式来分批处理元素:

while (sequence.Any()){
    var batch = sequence.Take(10);
    sequence = sequence.Skip(10);

    // do whatever you need to do with each batch here}


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 519 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信