Я пытаюсь создать следующий запрос в LINQ-TO-SQL.SUM и COUNT в одном запросе LINQ to SQL
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
Каково ваше требование группировки для ордеров, не очень ясное, какое свойство вы хотите использовать –
Все в порядке. Этот трюк называется ** группой константой ** и является единственным методом LINQ для создания нескольких агрегатов с одним запросом db. –