2010-08-03 51 views
2

我有這樣的數據表。 我從一個Excel工作表獲得這些數據,並轉換爲數據表如何計算(總結)數據表的行值

id workedhours tfshours 
1  3   2 
2  5   5 
3  .7   3 
4  2   3.2 
5  4.3  6.8 

現在我需要的列workedhours之和tfshours

我怎麼能achive是。有任何內建的功能來獲得德列的總和

我需要這樣的結果在一個新的DataTable

workedhours tfshours 
15    20 

任何幫助將大大appreicat編輯。 謝謝

回答

3

創建一個新的DataTable,並使用datatable.compute方法。

 DataTable sumDataTable = new DataTable(); 
     sumDataTable.Columns.Add("total", typeof(string)); 
     sumDataTable.Columns.Add("workedhours", typeof(int)); 
     sumDataTable.Columns.Add("tfshours", typeof(int)); 

     DataRow row = sumDataTable.NewRow(); 
     row["total"] = "Total"; 
     row["workedhours"] = oldDataTable.Compute("Sum(workedhours)", "workedhours > 0"); 
     row["tfshours"] = oldDataTable.Compute("Sum(tfshours)", "tfshours > 0"); 
     sumDataTable.Rows.Add(row); 

第二個參數filter指定表達式中使用了哪些行,但您可以只用「」來選擇所有行。

+0

感謝Chris Anderson爲我們的支持。 您的解決方案對我很好。 – happysmile 2010-08-04 18:32:43

0

嘗試的LinQ(對不起,只是VB但可以很容易地轉移到C#):

Dim sum_workedhours = (From x in myDB Select x.workedhours).Sum() 

根據你的班級,你正在使用保存數據庫,你可能需要迭代整個數據庫...也許你想給我們更多的細節

0

使用DataTable的方法:

decimal workedHours = (decimal)dataTable.Compute("Sum(workedhours)", ""); 
decimal tfsHours = (decimal)dataTable.Compute("Sum(tfshours)", ""); 

使用LINQ擴展:

decimal workedHours = dataTable.AsEnumerable().Sum( 
    row => decimal.Parse(row["workedhours"].ToString())); 

decimal tfsHours = dataTable.AsEnumerable().Sum( 
    row => decimal.Parse(row["tfshours"].ToString())); 
0
DataTable sumDataTable = new DataTable(); 
    sumDataTable.Columns.Add("total", typeof(string)); 
    sumDataTable.Columns.Add("workedhours", typeof(int)); 
    sumDataTable.Columns.Add("tfshours", typeof(int)); 

    DataRow row = sumDataTable .NewRow(); 
       for (int j = 0; j < sumDataTable .Columns.Count; j++) 
       { 
         if(sumDataTable .Columns[j].Caption!="total") 
         row[j] = sumDataTable .Compute("Sum([" +         
         sumDataTable .Columns[j].Caption + "])", "");      
       } 
       sumDataTable .Rows.Add(row); 
+0

儘管此代碼可能會回答問題,但提供有關如何解決問題和/或爲何解決問題的其他上下文可以提高答案的長期價值。 – thewaywewere 2017-06-16 06:56:49