我有这样的数据表。 我从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
任何帮助都会有很大的帮助。 谢谢
答案 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
答案 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);