Почему предпочтительнее использовать linq на IQueryable, чем linq на IEnumerable? - PullRequest
4 голосов
/ 29 ноября 2011

Я знаю, что могу использовать синтаксис linq в коллекциях, которые реализуют IQueryable или IEnumerable.

Использует ли IQueryable ленивый расчет и оптимизацию, а IEnumerable нет?

Включает ли оптимизация переупорядочение запросов?

Ответы [ 2 ]

9 голосов
/ 29 ноября 2011

Linq на IEnumerable использует Linq to Objects - Linq на IQueryable использует то, что поставщик запросов реализовал для стандартных операторов запросов.

Для ORM, таких как Linq to SQL и Entity Framework, т. Е. Это означает, что преобразование вашего запроса Linq в соответствующий запрос SQL в базе данных - фильтрация и т. Д. В базе данных гораздо предпочтительнее, чем перемещение всех этих данных в память, поскольку это будет намного лучше производительность.

3 голосов
/ 29 ноября 2011

Нет, IQueryable обычно поддерживается провайдерами, ориентированными на базы данных, и поддерживает перевод в SQL.
Любая оптимизация будет связана с движком SQL.

И IQueryable, и IEnumerable имеют отложенное выполнение.
interface IQueryable<T> : IEnumerable<T> ...

...