2015-09-11 67 views
1

我試圖將行從一個DataTable轉移到許多其他動態生成的DataTable s。父DataTable包含以下格式的數據:將一個DataTable劃分爲多個

ID Name Type 
-------------- 
1 ABC  0 
1 PQR  2 
2 XYZ  8 
2 QWE  7 
3 IOP  6 

我想,與同ID行必須在一個表中。例如,上面的場景會生成3個表格。一個包含ID = 1的行,第二個包含ID = 2的行,第三個包含ID = 3的行。我想實現這個使用下面的代碼:

DataSet ResultantDataSet = new DataSet(); 
DataView dv = InputDataSet.Tables[0].DefaultView; 
dv.Sort = "ID"; 
int newID = -1; 
DataTable dt = null; 
foreach(DataRow dr in dv.ToTable().Rows) { 
    if (newID != int.Parse(dr["ID"].ToString())) { 
     newID = int.Parse(dr["ID"].ToString()); 
     if (dt != null) ResultantDataSet.Tables.Add(dt); 
     dt = new DataTable(); 
    } else { 
     dt.ImportRow(dr); 
    } 
} 

但問題是,ResultantDataSet包含有一個未命名列空行的表。出了什麼問題?

+1

不是雞蛋裏挑骨頭或什麼,但你爲什麼要這麼做?這聽起來像是一種可怕的非規範化形式。 – Zane

+0

@Zane其實我有一個用戶控件接受'DataSet's並以特定的格式顯示它們。要將其轉換爲該格式,我需要執行此操作。 –

+0

好吧,那麼對我來說最好的辦法就是將唯一ID插入#Table中,然後遍歷每個值,並使用動態SQL語句爲每個值插入表。抱歉,不知道我是否有時間爲您寫一個代碼示例來說明如何完成此操作。 – Zane

回答

3

試試這個。

 IEnumerable<DataTable> tables = 
      table.AsEnumerable().GroupBy(t => t.Field<int>("ID")).Select(t => t.CopyToDataTable()); 
+1

如果它有效(我還沒有嘗試過),這將是一個非常優雅的解決方案。 – Christoph

+0

@Christoph是的工作。 :) –

+0

謝謝@Yhanhannes你是一個救生員。 :) –