我正嘗試在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方式。 –