我正尝试在LINQ-TO-SQL中创建以下查询。单个LINQ to SQL查询中的SUM和COUNT
select count(*), sum(o.CostInCents) from Orders o
where Flag = true;
我想出了以下LINQ查询:
var q = db.Orders
.Where(o => o.Flag)
var result = q
.GroupBy(o => 1)
.Select(g => new MyDTO
{
NoOfOrders = g.Count(),
TotalInCents = g.Sum(o => o.CostInCents)
})
.SingleOrDefaultAsync();
有没有更好的办法?
是.GroupBy(o => 1)
甚至可以吗?
另一种选择是做两个查询,如下所示。
var q = db.Orders
.Where(o => o.Flag);
//No groupBy
var result2 = new MyDTO
{
NoOfCostedOrders = q.Count(),//hit the db
TotalInCents = q.Sum(o => o.CostInCents)//hit the db 2nd time
};
我该如何判断哪种方法更好?
在此先感谢!
在性能方面,我建议保持iqueryable,只要你仍然可以过滤,http://stackoverflow.com/a/1578977/3956100以外即时通讯不完全确定你想用代码完成什么。 – Niklas
你对订单的分组要求是什么,不是很清楚,你想使用哪个属性 –
没关系。这个技巧被称为** group by constant **,并且是使用单个数据库查询生成多个聚合的唯一LINQ方式。 –