Мне нелегко говорить, какие операции в linq заставляют команду SQL быть выпущенной к базе данных.
Я знаю вызов, который ToList () или итерация w/foreach заставит запрос выполнять, но Выбор и GroupBy заставляют код выполняться на базе данных?
Нет, если они правильно вызываются в IQueryable
, а не в IEnumerable
, они компилируются как выражения и будут позже будет переведен на SQL.
Вы можете использовать всплывающую подсказку intellisense, чтобы увидеть, какой метод будет вызываемым в данный момент. Если первым параметром метода расширения является IEnumerable
, а не IQueryable
, вы столкнетесь с запросом к базе данных.
Нет, вызов Select() и GroupBy() не попадет в базу данных. Только когда требуется фактический результат (при перечислении, использовании ToList(), ToArray(), Count() и т.д.), запрос будет выполнен к базе данных.
Нет, Select
, GroupBy
и большинство других методов не вызывают запроса к базе данных. Запрос к базе данных обычно выполняется только тогда, когда вы делаете что-то, требующее известности результатов, например, вызываете Count
или ToList
, как вы упомянули.
Чтобы помочь вам увидеть, когда выполняются запросы к базе данных, может помочь их регистрация. Затем по мере прохождения кода вы можете видеть, когда запрос отправлен.