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)
でもOKですか?
もう1つのオプションは、以下のように2つのクエリを実行することです。
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
ご注文のグループ化要件は何ですか、あまり明確ではない、ご希望のプロパティ –
大丈夫です。このトリックは、** by group by constant **と呼ばれ、単一のdbクエリで複数の集計を生成する唯一のLINQの方法です。 –