2011-01-11 4 views
1

Ich habe eine Datentabelle:Gebäude Tabulator getrennte Dateien von einem Datentabelle

 var dt = new DataTable(); 
     dt.Columns.Add(new DataColumn("specimen", typeof(string))); 
     dt.Columns.Add(new DataColumn("batch", typeof(string))); 
     dt.Columns.Add(new DataColumn("position", typeof(string))); 

die Daten so etwas wie dies in der es aussehen:

Spec. ID Batch/Pos. position 
AA00721 16785 3 
AA00722 16785 2 
AA00734 16785 3 
AA00735 16860 6 
AA00737 16862 4 
AA00738 16860 7 
AA00739 16863 5 
AA00740 16860 9 
AA00741 16861 7 
AA00742 16861 0 
AA00743 16861 5 

für jede einzelne Charge, ich brauche eine Datei zu erstellen mit allen specIDs und Positionen.

zum Beispiel Datei 16785.txt würde wie folgt aussehen:

AA00721 3 
AA00722 2 
AA00734 3 

wie würde ich Schleife durch diese Datentabelle separate Dateien erstellen>? Bitte beachten Sie, dass die Chargennummern nicht sortiert sind.

+0

Was haben Sie bisher versucht? Ich nehme an, du suchst nach etwas wie 'foreach (var row in dt.Rows)', aber ich bin nicht wirklich sicher ... Zumindest: so würdest du die Datenbank durchlaufen ... ich bin nicht 100% sicher, wonach du suchst. – Crisfole

+0

@cpf wahrscheinlich eine linq Lösung wäre am besten –

+0

Das war nicht meine Frage: Was hast du probiert? Bist du auf der Schleife fest? Die Datei öffnet/schließt? Die Geschwindigkeit, mit der alles passiert? – Crisfole

Antwort

5

Wenn Sie eine LINQ-Methode verwenden möchten, würde ich Ihre Daten im Batch gruppieren und dann einfach durch die Gruppen iterieren.

var groupedData = from DataRow row in dt.Rows 
        let specimen = row["specimen"].ToString() 
        let batch = row["batch"].ToString() 
        let position = row["position"].ToString() 
        group new { specimen, position } by batch; 

foreach (var dataGroup in groupedData) 
{ 
    string fileName = string.Format(@"C:\Temp\{0}.txt", dataGroup.Key); // construct filename based on batch? 
    using (StreamWriter writer = new StreamWriter(fileName)) 
    { 
     foreach (var item in dataGroup) 
     { 
      writer.WriteLine("{0}\t{1}", item.specimen, item.position); 
     } 
    } 
} 
+0

+1 Beat mich dazu. Ich mag besonders die Verwendung von "Let" –

0

Erstellen Sie eine Datenansicht und sortieren Sie sie anhand der Chargennummer. Dann iteriere durch jede Zeile und schreibe die specid und die Position in eine Datei. Bewahren Sie die Baktchennummer außerhalb der Schleife auf. Erstellen Sie eine neue Datei, wenn sich die Bacth-Nummer jedes Mal ändert. Es kann andere Wege geben, aber ich finde diese einfach.

+0

das ist eine großartige Lösung –

+0

danke, markieren Sie als beantwortet, wenn es geholfen hat. – XtremeBytes

+0

Kannst du zeigen, dass ich es mit einer for-Schleife anstelle von foreach durchlaufen würde? Welches würde ich für deine Lösung brauchen? –

Verwandte Themen