Передать подмножества данных в SQL Server - PullRequest
1 голос
/ 15 января 2011

Я пытаюсь выяснить, как я могу разбить свою таблицу данных и отправить ее (как UDT) на сервер sql). Поэтому, если у меня есть 100 000 в моей таблице данных, я бы хотел разбить ее на 10 000 кусков для отправки на мой sql сервер. Я просто не уверен в том, как взять 1000000 данных и разбить их на эти 10 000 000 блоков?

Любые предложения будут с благодарностью.

Так что, если бы я использовал что-то вроде этого:

var results = (from myRow in myDataTable.AsEnumerable()
              select myRow).take(10000);

Не знаете, как я могу убедиться, что я взял следующий набор из 10000 строк из таблицы данных и не отправляю дубликаты и не получаю все строки?

1 Ответ

1 голос
/ 15 января 2011

Просто напишите себе простой способ превратить любую коллекцию в куски заданного размера:

/// <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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...