如何计算(总结)数据表的行值

时间:2010-08-03 13:09:18

标签: c#

我有这样的数据表。 我从excel表中获取此数据并转换为数据表

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

现在我需要列workhours和tfshours的总和

我怎么能得到那个。有任何内置函数来获得列的总和

我需要在新的数据表中使用这样的结果

 workedhours   tfshours
15                20

任何帮助都会有很大的帮助。  谢谢

5 个答案:

答案 0 :(得分:6)

创建一个新的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决定表达式中使用哪些行,但你可以只用“”来选择所有行。

答案 1 :(得分:3)

DataTable对象中有内置方法:DataTable.Compute

MSDN description

答案 2 :(得分:0)

尝试LinQ(对不起,只是VB但很容易转移到C#):

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

根据您用来保存数据库的类,您可能需要迭代整个数据库......也许您想向我们提供更多详细信息

答案 3 :(得分: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() ) );

答案 4 :(得分: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);