2011-01-14 6 views
1

Ich versuche herauszufinden, wie ich meine Datentabelle trennen und diese (als UDT) an SQL Server senden könnte. Wenn ich 100.000 in meiner Datentabelle habe, würde ich gerne in der Lage sein, sie in 10.000 Chunks zu zerlegen, um sie an meinen SQL-Server zu senden. Ich bin mir nur nicht sicher, wie ich die Datentabelle mit 100.000 nehmen und in diese 10.000k-Blöcke aufteilen würde?Übergeben von Subsets der Datentabelle an SQL Server

Alle Vorschläge würden sehr geschätzt werden.

Also, wenn ich etwas so benutzten:

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

nicht sicher, wie ich konnte sicherzustellen, dass ich den nächsten Satz von 10.000 Zeilen aus der Datentabelle packte und sicherzustellen, dass ich nicht Duplikate senden und alle Zeilen erhalten ?

+0

Sie einen Auftrag definieren sollte – BrokenGlass

+0

@BrokenGlass können Sie weiter erklären, was Sie meinen? – scarpacci

Antwort

1

schreiben Sie sich einfach eine einfache Methode, jede Sammlung in Stücke einer bestimmten Größe zu drehen:

/// <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; 
} 

Und dann kann man trivialer diese verwenden, zum Beispiel:

foreach (var chunk in myDataTable.AsEnumerable().Chunk(10000)) 
{ 
    // Process the chunk 
} 
+0

Danke @Timwi! Ich werde es versuchen. – scarpacci

Verwandte Themen