C# 如何在.net中将数据表拆分为较小的大小
我有一个扩展方法,可以将数据表拆分为上面提到的大小。假设我说1000,如果我有10000个项目,它将创建10个包含1000个项目的数据表。我的项目更多,它将创建很多数据表。但是我想要的是我们所有的项目,我只需要5个数据表。如何实现它。我的代码是C# 如何在.net中将数据表拆分为较小的大小,c#,.net,datatable,C#,.net,Datatable,我有一个扩展方法,可以将数据表拆分为上面提到的大小。假设我说1000,如果我有10000个项目,它将创建10个包含1000个项目的数据表。我的项目更多,它将创建很多数据表。但是我想要的是我们所有的项目,我只需要5个数据表。如何实现它。我的代码是 var tables = dt.AsEnumerable().ToChunks(10000) .Select(rows => rows.CopyToDataTable()) public
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;
}
}
var tables=dt.AsEnumerable().ToChunks(10000)
.Select(rows=>rows.CopyToDataTable())
公共静态IEnumerable ToChunks(此IEnumerable enumerable,
整数块大小)
{
int itemsreturn=0;
var list=enumerable.ToList();//防止多次执行IEnumerable。
int count=list.count;
while(itemsreturn
编辑
我有50000条记录,我想在TPL任务中处理它。在这段代码中,它将创建50个数据表和50个不好的任务。因此,我希望5个数据表每个包含10000条记录和5个任务。这不是固定的,我的意思是,如果是60000条,那么5个任务和5个表每个包含12000条记录,使用非常好的实现,您可以做到:
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);
一个数据表可以容纳16777216行,将其拆分似乎是一个糟糕的设计决策。也许你可以分享一下为什么你想把它分开,也许有人能帮你。我有50000条记录,我想在TPL任务中处理它。在这段代码中,它将创建50个数据表和50个不好的任务。所以我想要5个数据表,每个表包含10000条记录和5个任务。这不是固定的,我的意思是如果它是60000,那么5个任务和5个表,每个表有12000条记录,这是一个datatable@peter什么意思?代码中没有数据表。