2013-01-10 90 views
2

我有一個DataSet和2 DataTable's。每個DataTable包含一個名爲「成本」的列。 我想計算一個名爲Result table的表中所有成本的總和,如下面的例子。我怎樣才能做到這一點?在數據集中添加數據表的列

Table 1 
Name | cost 
balan | 6 
gt | 5 

Table 2 
Name | cost 
balan | 2 
gt | 8 

Result table 
Name | cost 
balan | 8 
gt | 12 

回答

0

得到結果,你可以這樣做

var table1 = yourDataSet.Tables["Table 1"]; 
var table2 = yourDataSet.Tables["Table 2"]; 

var results = table1.AsEnumerable().Select(t1 => new { 
        name = t1.Field<string>("Name"), 
        cost = t1.Field<int>("cost") 
       }) 
       .Concat(

       table2.AsEnumerable().Select(t2 => new { 
        name = t2.Field<string>("Name"), 
        cost = t2.Field<int>("cost") 
       }) 
      ) 
       .GroupBy(m => m.name) 
       .Select(g => new { 
       name = g.Key, 
       cost = g.Sum(x => x.cost) 
       }); 

這不會給你一個DataTable,而是一個IEnumerable。要改變一個IEnumerable到DataTable,例如見here

或更容易,如果Table 1和Table具有相同的行

var table1 = yourDataSet.Tables["Table 1"]; 
var table2 = yourDataSet.Tables["Table 2"]; 

var results = new DataTable(); 

results.Columns.Add("Name"); 
results.Columns.Add("cost", typeof(int)); 

table1.AsEnumerable().Concat(table2.AsEnumerable()) 
       .GroupBy(m => m.Field<string>("Name")) 
       .Select(g => results.Rows.Add(g.Key, g.Sum(x => x.Field<int>("cost")))); 
1

這是一個辦法做到這一點:

DataTable dt1 = new DataTable(); 
DataTable dt2 = new DataTable(); 
DataTable results = new DataTable(); 

dt1.Columns.Add("Name"); 
dt1.Columns.Add("cost", typeof(int)); 
dt2.Columns.Add("Name"); 
dt2.Columns.Add("cost", typeof(int)); 
results.Columns.Add("Name"); 
results.Columns.Add("cost", typeof(int)); 

dt1.Rows.Add("balan", 6); 
dt2.Rows.Add("balan", 2); 
dt1.Rows.Add("gt", 5); 
dt2.Rows.Add("gt", 8); 


foreach (DataRow dr1 in dt1.Rows) 
{ 
    results.Rows 
     .Add(
      dr1["Name"], 
      (int)dr1["cost"] + (int)dt2.Select(String.Format("Name='{0}'", dr1["name"]))[0]["cost"] 
     ); 
}