我有三列,我试图获得每一列的总和。我可以为一列做到这一点:
var data = db.Test.Sum(x => x.Column1);
我无法弄清楚如何获得三列的总和。我尝试选择值并将它们相加,但这不起作用。
var data = db.Test.Select(x=> new { x.Column1, x.Column3, x.Column3}).Sum();
我分别在每列的结果之后,而不是所有列的总和。
答案 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();