12

我想在一个查询中总结一个表的三个不同字段。我想要这个 T-SQL 的 linq 等价物:

select sum(fld1), SUM(fld2),  SUM(fld3)   from MyTable where classID = 5

我发现的所有示例都使用 group by 或多次调用查询,每个需要汇总的字段一次。

我现在有这样的东西。但我不想给它添加一个 group by 子句,因为它的 T-SQL 形式不需要它。

from a in MyTable
where a.classID == 5
group a by a.classID into g
select new 
{
Sumfld1 =  g.Sum(x => x.fld1 ), 
Sumfld2 = g.Sum(x => x.fld2),
Sumfld3 = g.Sum(x => x.fld3)
}

有什么建议么?谢谢你的时间。

4

2 回答 2

13

事实证明,在 linq-to-sql 中,您可以通过以下方式非常接近:

from a in MyTable
where a.classID == 5
group a by 0 into g
select new 
{
    Sumfld1 = g.Sum(x => x.fld1), 
    Sumfld2 = g.Sum(x => x.fld2),
    Sumfld3 = g.Sum(x => x.fld3)
}

(注意按0分组)

它不会转换为 sql GROUP BY,而是来自子查询SELECT的多个SUMs 。就执行计划而言,它甚至可能是相同的。

实体框架仍然创建GROUP BY一个0.

于 2012-04-20T13:26:52.873 回答
0
var x = from a in MyTable 
        where a.classID == 5 
        select a;

int? Sumfld1 = x.Sum(y => y.fld1);
int? Sumfld2 = x.Sum(y => y.fld2);
int? Sumfld3 = x.Sum(y => y.fld3);
于 2012-04-20T06:09:51.350 回答