`SELECT MIN (ZoneMin), MAX (ZoneMin) FROM Plant` как LINQ to SQL - PullRequest
11 голосов
/ 12 января 2011

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

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

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

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

Что такое запрос LINQ, который может привести меня к этому (или что-то похожее) SQL?

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

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

1 Ответ

14 голосов
/ 12 января 2011

Для достижения той же производительности, что и в исходном запросе, вам нужно использовать группирование (по константе, чтобы минимизировать влияние, например, 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...