【问题标题】:how to split datatable in to small sizes in .net如何在.net中将数据表拆分为小尺寸
【发布时间】:2017-11-07 17:48:05
【问题描述】:

我有一个扩展方法,可以将数据表拆分为提到的大小。假设如果我说 1000,如果我有 10000 个项目,它将创建 10 个包含 1000 个项目的数据表。我的项目更多,那么它将创建很多数据表。但我想要的是我们拥有的任何项目,我只想要 5 个数据表。如何实现它。我拥有的代码是

var tables = dt.AsEnumerable().ToChunks(10000)
                          .Select(rows => rows.CopyToDataTable())
    public static IEnumerable<IEnumerable<T>> ToChunks<T>(this IEnumerable<T> enumerable,
                                                          int chunkSize)
    {
        int itemsReturned = 0;
        var list = enumerable.ToList(); // Prevent multiple execution of IEnumerable.
        int count = list.Count;
        while (itemsReturned < count)
        {
            int currentChunkSize = Math.Min(chunkSize, count - itemsReturned);
            yield return list.GetRange(itemsReturned, currentChunkSize);
            itemsReturned += currentChunkSize;
        }
    }

编辑

我有 50000 条记录,我想在 TPL 任务中处理它。在此代码中,它将创建 50 个数据表和 50 个不好的任务。所以我想要 5 个数据表,每个包含 10000 条记录和 5 个任务。这不是固定的,我的意思是如果它是 60000 则 5 个任务和 5 个表,每个表有 12000 条记录

【问题讨论】:

  • 一个 DataTable 可以容纳 16,777,216 行 source,将其拆分为一个糟糕的设计决策。或许您可以分享一下您希望它拆分的原因,并且有人可以帮助您。
  • 我有 50000 条记录,我想在 TPL 任务中处理它。在此代码中,它将创建 50 个数据表和 50 个不好的任务。所以我想要 5 个数据表,每个包含 10000 条记录和 5 个任务.这不是固定的,我的意思是如果它是 60000 则 5 个任务和 5 个表,每个表有 12000 条记录

标签: c# .net datatable


【解决方案1】:

有了很好的实现here,你可以这样做:

var array = sequence.ToArray();
var numberOfSlices = 5;
var numberOfElementsInSlice = Math.Ceil(array.Length / (double)numberOfSlices);
var sliceRanges = Enumerable.Repeat(numberOfElementsInSlice, numberOfSlices).ToArray();

var slices = array.Slice(sliceRanges);

【讨论】:

  • 这是一个数据表
  • @peter 你是什么意思?您的代码中没有数据表。
猜你喜欢
  • 2023-01-20
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 2020-10-25
  • 2023-04-11
相关资源
最近更新 更多