Является ли VB.NET Aggregate
запросом смертельно ошибочным при использовании в качестве первого (внешнего) предложения выражения Linq с несколькими предложениями Into
, потому что каждое предложение Into
выполняется отдельно?
"Очевидный" ответ SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant
в LINQ to SQL -
Dim limits = Aggregate p In Plants Select p.ZoneMin Into Min(), Max()
Однако этот ответ фактически извлекает каждый из Min
и Max
(и если вы включаете другие агрегированные функции, такие как Count
и Average
) в отдельные SQL-запросы. Это можно легко увидеть в LINQPad.
Есть ли транзакция (или что-то другое, делающая эти запросы атомарными), не показанные LINQPad, или это состояние гонки, ожидающее своего существования? (И поэтому вам нужно сделать трюки, указанные в ответе на вышеупомянутый вопрос, для принудительного единственного запроса, который возвращает несколько агрегатов.)
Итак, существует ли запрос LINQ-to-SQL с помощью Aggregate
, который возвращает несколько агрегатных функций в одном (или, по крайней мере, "атомарном" ) запросе?
<суб > (Я также говорю "очевидный", потому что очевидный ответ мне, Aggregate p In Plants Into Min(p.ZoneMin), Max(p.ZoneMin)
, фактически извлекает всю таблицу дважды, даже когда оптимизирован, а затем использует Linq-to-Entities Min
и Max
для получения результата: -()
Я думал, что Aggregate
не является VB-специфичным, но похоже, что у С# нет этого выражения запроса, поэтому я изменил сообщение .net до vb.net.