我有一个DataTable,每行有一列“amount”,我希望得到所有行的总和。而且,我想获得DataTable中的总行数。任何人都可以教我如何使用LINQ而不是普通方式完成它吗?
答案 0 :(得分:8)
行数:
DataTable dt; // ... populate DataTable
var count = dt.Rows.Count;
“金额”栏的总和:
DataTable dt; // ... populate DataTable
var sum = dt.AsEnumerable().Sum(dr => dr.Field<int>("amount"));
答案 1 :(得分:2)
Aggregate允许您避免枚举行两次(您可以从行集合中获取行计数,但这更多是为了显示如何在1遍中提取多个聚合):
var sumAndCount = table.AsEnumerable().Aggregate(new { Sum = 0d, Count = 0},
(data, row) => new { Sum = data.Sum + row.Field<double>("amount"), Count = data.Count + 1});
double sum = sumAndCount.Sum;
int count = sumAndCount.Count;
答案 2 :(得分:0)
decimal[] Amount = {2,3,5 };
var sum = Amount.Sum();
var count = Amount.Count();
答案 3 :(得分:0)
根据Roy Goode的答案,您还可以创建扩展程序
public static int Sum(this DataTable table, string Column)
{
return table.AsEnumerable().Sum(dr => dr.Field<int>(Column));
}
不幸的是,由于没有where T : numeric