如何使用LINQ对DataTable进行计数和总计?

时间:2012-02-07 09:41:28

标签: c# linq

我有一个DataTable,每行有一列“amount”,我希望得到所有行的总和。而且,我想获得DataTable中的总行数。任何人都可以教我如何使用LINQ而不是普通方式完成它吗?

4 个答案:

答案 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

,你不能更通用她