我有这个数据表:
我还有一个包含两个属性的类,它们应该保存每个列的总和:
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字段)
答案 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)", "")
}