获取多列的总和

时间:2014-08-25 15:28:57

标签: c# entity-framework sum

我有三列,我试图获得每一列的总和。我可以为一列做到这一点:

var data = db.Test.Sum(x => x.Column1);

我无法弄清楚如何获得三列的总和。我尝试选择值并将它们相加,但这不起作用。

var data = db.Test.Select(x=> new { x.Column1, x.Column3, x.Column3}).Sum();

我分别在每列的结果之后,而不是所有列的总和。

2 个答案:

答案 0 :(得分:12)

var sums = db.Tests
    .GroupBy(x => true)
    .Select(x => new 
    { 
        SumColumn1 = x.Sum(y => y.Column1), 
        SumColumn2 = x.Sum(y => y.Column2), 
        SumColumn3 = x.Sum(y => y.Column3) 
    });

GroupBy(x => true)语句将所有项目放在一个组中。 Select语句允许对每个组执行操作。在这种情况下,唯一的一组是一组所有项目,允许我们返回每列的Sum

答案 1 :(得分:-1)

要获得三个不同列的总和,您需要将序列投影到该列并获得三个不同时间的总和:

var sum1 = db.Test.Sum(x => x.Column1);
var sum2 = db.Test.Sum(x => x.Column2);
var sum3 = db.Test.Sum(x => x.Column3);

要在单个数据库请求中执行此操作,您可以使用另一个查询的范围执行这些投影:

var sums = db.Test.Take(1)
    .Select(unused => new
    {
        sum1 = db.Test.Sum(x => x.Column1),
        sum2 = db.Test.Sum(x => x.Column2),
        sum3 = db.Test.Sum(x => x.Column3),
    })
    .First();