IQueryable против IEnumerable в шаблоне репозитория, ленивая загрузка

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

Где, как IQueryable, предоставить разработчикам большую гибкость. Существует ленивая загрузка.

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

Ответ 1

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

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

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

См. также
Отложенное исполнение и нетерпеливая оценка

Ответ 2

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

Поэтому при запросе данных из коллекций в памяти, таких как List, Array и т.д., вы должны использовать IEnumerable.

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

Ответ 3

IEnumerable vs IQueryable

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