2010-06-22 2 views
7

Мне сложно сказать, какие операции в linq вызывают SQL-команду для выдачи в базу данных.Вызывает ли вызов Select() или GroupBy() в Linq объекты, инициирующие запрос к базе данных?

Я знаю, что вызов ToList() или итерация w/foreach приведет к запуску запроса, но выберите ли Select и GroupBy код для выполнения в базе данных?

ответ

6

Нет, они не являются, если они правильно вызывают IQueryable, а не IEnumerable, они компилируются как выражения и позже будут переведены на SQL.

Вы можете использовать всплывающую подсказку intellisense, чтобы увидеть, каким будет текущий метод. Если первым параметром метода расширения является IEnumerable, а не IQueryable, вы столкнетесь с запросом базы данных.

+1

Вы уверены, что вызываете GroupBy в IEnumerable, а не в IQueryable, потому что запрос будет отправлен в базу данных? Я думал, что только когда вы начнете перечислять, что запрос отправлен. –

0

Нет, вызовы Select() и GroupBy() не попадут в базу данных. Только когда требуется фактический результат (при перечислении, используя ToList(), ToArray(), Count() и т. Д.), Запрос будет выполнен в отношении базы данных.

1

No, Select, GroupBy и большинство других методов не вызовет запрос базы данных. Запрос базы данных обычно делается только тогда, когда вы делаете то, что требует, чтобы результаты были известны, например, вызывали Count или ToList, как вы упомянули.

Чтобы помочь вам увидеть запросы базы данных, это может помочь их зарегистрировать. Затем, когда вы переходите через код, вы можете видеть, когда запрос отправлен.

+0

Спасибо за подсказку, но я не думаю, что могу увидеть запущенный журнал Linq-to-entities ... – user169867

+0

Возможно, вы можете посмотреть на этот вопрос и его ответы: http://stackoverflow.com/questions/137712/SQL-калька LINQ к лицам –

Смежные вопросы