【发布时间】: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 条记录