C# 获取多个列的总和
我有三列,我试图得到返回的每一列的总和。我可以为一个专栏做这件事:C# 获取多个列的总和,c#,entity-framework,sum,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(); 我要分别计算每一列的结果,而不是所有列的总和 var sums = db.Tests .GroupB
var data = db.Test.Sum(x => x.Column1);
但是我不知道如何得到三列的总和。我试着把这些值选出来并求和,但那不起作用
var data = db.Test.Select(x=> new { x.Column1, x.Column3, x.Column3}).Sum();
我要分别计算每一列的结果,而不是所有列的总和
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
语句允许对每个组进行操作。在这种情况下,唯一的组是一组所有项目,允许我们返回每列的总和。要获得三个不同列的总和,您需要将序列投影到该列,并在三个不同的时间获得总和:
var sum1 = db.Test.Sum(x => x.Column1);
var sum2 = db.Test.Sum(x => x.Column2);
var sum3 = db.Test.Sum(x => x.Column3);
要在单个DB请求中执行此操作,您可以在另一个查询的范围内执行这些投影:
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();
把他们分开询问会更容易吗?是的,我可以。但我认为在DB上进行一次查询比3次性能查询更好。@Joseph尝试一下并找出答案。我希望如此,但这可能还不够麻烦。这将导致三个单独的
select sum
语句,导致执行时间比下面发布的单个GroupBy答案更长。@RobEpstein只要在到DB的一次往返中完成,我希望差异非常小。一次对3列求和并不比单独对3列求和更昂贵或更便宜。第一种选择当然有3次往返数据库;第二个选项消除了这个缺点。