在1个linq表达式中汇总数据表?

时间:2013-07-29 10:56:25

标签: c# linq

我有这个数据表:

enter image description here

我还有一个包含两个属性的类,它们应该保存每个列的总和:

class MyClass
{
 public decimal CatSum {get;set;}
 public decimal DogSum {get;set;}
}

我目前通过以下方式填写这些道具:

 myClass.CatSum = dt.AsEnumerable().Sum(r => r["Cat"].ToDecimalOrZero());
 myClass.DogSum = dt.AsEnumerable().Sum(r => r["Dog"].ToDecimalOrZero())

有没有办法用 1 linq查询填充(或用这些道具创建新类)这些道具? (我这里没有任何groupby字段)

3 个答案:

答案 0 :(得分:4)

您可以使用MyClass的实例作为累加器并将结果汇​​总到其中:

var myClass = dt.AsEnumerable()
                .Aggregate(new MyClass(),
                           (a,r) => {
                                a.CatSum += r["Cat"].ToDecimalOrZero();
                                a.DogSum += r["DogS"].ToDecimalOrZero();
                                return a;
                           });

答案 1 :(得分:2)

Sum是聚合查询,您不能使用单个LINQ查询来分配2个属性。

答案 2 :(得分:1)

为什么要使用Linq?

var myClass = new MyClass
{
    CatSum = (decimal)dt.Compute("SUM(Cat)", ""),
    DogSum = (decimal)dt.Compute("SUM(Dog)", "")
}