Вы можете сделать что-то подобное:
var averages = myTable
.Where(item => item.ColumnX == 234)
.Aggregate(
new { count = 0, sum1 = 0.0, sum2 = 0.0 },
(acc, item) => new { count = acc.count + 1, sum1 = acc.sum1 + item.Column1, sum2 = acc.sum2 + item.Column2 },
acc => new { avg1 = acc.sum1 / acc.count, avg2 = acc.sum2 / acc.count });
Обратите внимание на вызов AsEnumerable()
для принудительного выполнения Aggregate
локально (поскольку EF, вероятно, не знает, как его преобразоватьв SQL) На самом деле это работает;)
В качестве альтернативы, вы можете использовать этот запрос:
var averages =
from item in table
where item.ColumnX == 234
group item by 1 into g
select new
{
Average1 = g.Average(i => i.Column1),
Average2 = g.Average(i => i.Column2)
};
Использование group by
здесьне очень интуитивно понятно, но, вероятно, легче читать, чем другое решение.Не уверен, что он может быть преобразован в SQL, хотя ...