我试图找出如何分解我的数据表并将其(作为UDT)发送到sql server)。因此,如果我的数据表中有100,000个,我希望能够将其分解为10,000个块以发送到我的sql server。我只是不确定如何将数据表带到100,000并将其分解为10,000k块?
任何建议都将不胜感激。
所以,如果我使用这样的东西:
var results = (from myRow in myDataTable.AsEnumerable()
select myRow).take(10000);
我不确定如何确保从数据表中获取下一组10,000行,并确保不发送重复项并获取所有行?
答案 0 :(得分:1)
只需给自己写一个简单的方法,将任何集合转换为指定大小的块:
/// <summary>Splits a collection into chunks of equal size. The last chunk may be smaller than chunkSize, but all chunks, if any, will contain at least one element.</summary>
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source, int chunkSize)
{
if (chunkSize <= 0)
throw new ArgumentException("chunkSize must be greater than zero.", "chunkSize");
return chunkIterator(source, chunkSize);
}
private static IEnumerable<IEnumerable<T>> chunkIterator<T>(IEnumerable<T> source, int chunkSize)
{
var list = new List<T>();
foreach (var elem in source)
{
list.Add(elem);
if (list.Count == chunkSize)
{
yield return list;
list = new List<T>();
}
}
if (list.Count > 0)
yield return list;
}
然后你可以轻而易举地使用它,例如:
foreach (var chunk in myDataTable.AsEnumerable().Chunk(10000))
{
// Process the chunk
}