IQueryable против IEnumerable в шаблоне хранилища, отложенная загрузка - PullRequest
16 голосов
/ 21 января 2012

Я прочитал несколько статей, в которых утверждается, что IEnumerable используется для имитации хранимых процедур или ограничения вашей базы данных.Потеря возможности отложенной загрузки на внешнем провайдере.

Где IQueryable, чтобы дать разработчикам большую гибкость.Есть отложенная загрузка.

С точки зрения производительности, оба потребляют значительное количество производительности .. так какой из них более предпочтителен?

Ответы [ 3 ]

25 голосов
/ 21 января 2012

С точки зрения шаблона репозитория вы можете думать об этом следующим образом:

  1. Используйте энергичную загрузку IEnumerable, если вы хотите передать весь список клиенту водин ход.Они по-прежнему могут добавлять предложения linq, но клиент не получает выгоды от отложенного выполнения.

  2. Используйте отложенную загрузку IQueryable, когда вы хотите расширить возможности отложенного запроса для клиента, разрешивклиент, чтобы добавить свои собственные пункты linq.Это откладывает выполнение всего запроса до тех пор, пока не потребуется вывод.

См. Также
Отложенное выполнение и жадная оценка

2 голосов
/ 21 февраля 2017

IEnumerable vs IQueryable

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

0 голосов
/ 09 мая 2016

Основное различие между «IEnumerable» и «IQueryable» заключается в том, где выполняется логика фильтра. Один выполняется на стороне клиента (в памяти), а другой - в базе данных.

Таким образом, при запросе данных из коллекций в памяти, таких как List, Array и т. Д., Вы должны использовать IEnumerable.

С другой стороны, при запросе данных из коллекций вне памяти (например, из удаленной базы данных, службы) следует использовать IQueryable.

...