Не уверен, что он работает с EF, но вы можете попробовать что-то вроде этого:
var query =
from p in products
group p by 0 into g
select new
{
Min = g.Min(p => p.Price),
Max = g.Max(p => p.Price),
Avg = g.Average(p => p.Price)
};
var result = query.First();
РЕДАКТИРОВАТЬ: только что попробовал в LINQPad с Linq to SQL, он работает ... так что, вероятно, работает и в EF
Приведенный выше запрос генерирует следующий SQL:
SELECT TOP (1) [t2].[value] AS [Min], [t2].[value2] AS [Max], [t2].[value3] AS [Avg]
FROM (
SELECT MIN([t1].[Price]) AS [value], MAX([t1].[Price]) AS [value2], AVG([t1].[Price]) AS [value3]
FROM (
SELECT @p0 AS [value], [t0].[Price]
FROM [Product] AS [t0]
) AS [t1]
GROUP BY [t1].[value]
) AS [t2]
(часть SELECT TOP(1)
существует только из-за вызова First
)
Это явно не оптимально, но я предполагаю, что SQL Server достаточно умен, чтобы оптимизировать его до чего-то более простого ...