`SELECT MIN (ZoneMin), MAX (ZoneMin) FROM Plant` как LINQ to SQL

Этот довольно простой SQL-запрос оказывается довольно запутанным при попытке его из LINQ.

У меня есть таблица SQL Plant со столбцом ZoneMin.

Я хочу найти минимальное и максимальное значения в столбце.
Ответ в T-SQL довольно прост:

SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant

Какой запрос LINQ мог бы получить меня к этому (или подобному) SQL?

Я делал различные попытки .Aggregate() и .GroupBy() без везения. Я также рассмотрел несколько вопросов SO, которые кажутся похожими.

Это может быть просто достигнуто с помощью методов, применяемых к результирующему массиву, но мне не нужно переносить значение из каждой строки SQL, когда это так просто в T-SQL.

Ответ 1

Чтобы достичь той же производительности, что и исходный запрос, вам нужно будет использовать группировку (константой для минимизации воздействия, например 0), чтобы вы могли ссылаться на один и тот же набор записей дважды в одном запросе, Использование имени таблицы приводит к созданию нового запроса для каждой ссылки. Попробуйте следующее:

(from plant in db.Plants
 group plant by 0 into plants
 select new { Min = plants.Min(p => p.ZoneMin), Max = plants.Max(p => p.ZoneMin) }
).Single()

Выдает следующий запрос:

SELECT MIN(plants.ZoneMin), MAX(plants.ZoneMin)
FROM (SELECT 0 AS Grp, ZoneMin FROM Plants) AS plants
GROUP BY plants.Grp

И после того, как оптимизатор будет выполнен с ним, он выплевывает что-то, эквивалентное вашему запросу, по крайней мере, согласно SQL Server Management Studio.