2017-08-24 59 views
0

我有两个DataTable正在填充。如何在C#中动态组合两个或多个DataTables

DT1 and DT2 

每个DataTable具有相同的列标题。但是,DT2可能有或没有相同数量的行。

ID | Type | Value 

我需要的新表,以在必要时基于被在“类型”列中返回,并设置DT3行ID = DT1.ID和值设置为“N/A”的结果数加行

 DT1      DT2        DT3 
ID | Type | Value  ID | Type | Value  ID | Type | Value 
1 ItemCost 5000  27 ItemCost 3800  27 ItemCost 3800 
2 TravCost 5700  28 TravCost 4851  28 TravCost 4851 
3 UpCharge 3600         3 UpCharge N/A 
4 TaxCost 7000         4 TaxCost N/A 
+0

基本上,我需要的东西就像一个VLOOKUP。但是不用表格来做,我需要用结果集来完成。 – BigBucks

回答

2

这是我对这个问题的代码:

  DataTable dt1 = new DataTable(); 
      dt1.Columns.Add("ID"); 
      dt1.Columns.Add("Type"); 
      dt1.Columns.Add("Value"); 
      dt1.Rows.Add(new Object[] { "1", "ItemCost", "5000" }); 
      dt1.Rows.Add(new Object[] { "2", "TravCost", "5700" }); 
      dt1.Rows.Add(new Object[] { "3", "UpCharge", "3600" }); 
      dt1.Rows.Add(new Object[] { "4", "TaxCost", "7000" }); 
      DataTable dt2 = new DataTable(); 
      dt2.Columns.Add("ID"); 
      dt2.Columns.Add("Type"); 
      dt2.Columns.Add("Value"); 
      dt2.Rows.Add(new Object[] { "27", "ItemCost", "3800" }); 
      dt2.Rows.Add(new Object[] { "28", "TravCost", "4851" }); 
      DataTable dt3 = new DataTable(); 
      dt3 = dt2.Clone(); 
      foreach (DataRow item in dt2.Rows) 
      { 
       dt3.Rows.Add(new object[] { item["ID"], item["Type"], item["Value"] }); 
      } 
      foreach (DataRow item in dt1.Rows) 
      { 
       DataRow[] drs = dt3.Select("Type='" + item["Type"].ToString() + "'"); 
       if (drs.Count() == 0) 
       { 
        dt3.Rows.Add(new object[] { item["ID"], item["Type"], "N/A" }); 
       } 
      } 
+0

是的,它非常接近工作,但还有一件事。如何转换值类型?输入字符串的格式不正确。请勿在值列中存储。预期类型是Double。谢谢iceDragon – BigBucks

+0

在回家的路上,我会在那里编辑它 – iceDragon

+0

感谢您的帮助iceDragon。我最后只是将这个:CONVERT(VARCHAR(50),Value)AS Value添加到每个DataTable的原始查询语句中。再次感谢您的帮助 – BigBucks

相关问题