2011-01-11 47 views
1

我有一個數據表:建築標籤從一個數據表分隔的文件

 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))); 

數據看起來像這裏面的吧:

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 

每個唯一的批次,我需要創建一個文件與所有specids和職位。

例如文件16785.txt應該是這樣的:

AA00721 3 
AA00722 2 
AA00734 3 

如何將我遍歷該數據表創建單獨的文件>?請假定批號不排序

+0

到目前爲止,您嘗試了什麼?我假設你正在尋找像`foreach(var row in dt.Rows)`這樣的東西`,但我不太確定......至少:這就是你如何循環訪問數據庫......我是不是100%確定你在找什麼。 – Crisfole 2011-01-11 18:28:17

+0

@cpf可能是一個linq解決方案將是最好 – 2011-01-11 18:29:12

+0

這不是我的問題:你有什麼嘗試?你在循環中卡住了嗎?文件打開/關閉?一切發生的速度? – Crisfole 2011-01-11 18:30:11

回答

5

如果您想要使用LINQ方法,我會將您的數據在批處理上分組,然後遍歷這些組。

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

創建一個數據視圖並根據批號進行排序。然後遍歷每行並將specid和postion寫入文件。將循環編號存儲在循環外部。如果每次更改bacth號碼,都要創建一個新文件。 可能還有其他方法可以做到這一點,但我覺得這個很簡單。

相關問題