IQueryable & л; Т & GT; против IEnumerable < T > с лямбдой, какой выбрать?

StackOverflow https://stackoverflow.com/questions/245343

  •  05-07-2019
  •  | 
  •  

Вопрос

Я делаю все больше и больше упражнений с Lambda, но я не понимаю, почему иногда используют .AsQueryable (); , которые используют IQueryable, а иногда опускают .AsQueryable (); и используйте IEnumerable.

Я прочитал MSDN , но не понимаю, как " выполнение дерева выражений " это преимущество перед нет.

Кто-нибудь может мне это объяснить?

Это было полезно?

Решение

IQueryable реализует IEnumerable, поэтому сразу с IQueryable вы можете делать все, что вы можете делать с IEnumerable. IQueryables имеет дело с преобразованием некоторого лямбда-выражения в запрос к базовому источнику данных - это может быть база данных SQL или набор объектов.

Обычно вам не нужно заботиться о том или ином случае, если это IQueryable или IEnumerable.

Другие советы

Как пользователь, вам, как правило, не нужно беспокоиться, это действительно связано с разработчиком источника данных. Если поставщики данных просто реализуют IEnumerable, вы в основном выполняете LINQ для выполнения объектов, то есть он выполняет операции с памятью для коллекций. IQueryable предоставляет источнику данных возможность преобразовывать дерево выражений в альтернативное представление для выполнения после выполнения выражения (обычно путем перечисления), что и делают Linq2Sql, Linq2Xml и Linq2Entities.

Единственный раз, когда я вижу заботу конечного пользователя, это если он хочет проверить дерево выражений, которое должно быть выполнено, поскольку IQueryable предоставляет Expression. Другое использование может быть проверка провайдера. Но оба эти сценария действительно должны быть зарезервированы для разработчиков других поставщиков запросов и хотят преобразовать выражение. Суть Linq в том, что вам не нужно заботиться о реализации исполнения выражения, которое будет использоваться.

Я согласен с Арне Клаассеном, есть случаи, когда вам нужно подумать о том, что лежит в основе источников данных. Например, проверьте этот блог пост , в котором показано, как SQL, генерируемый IEnumerable и IQueryable, отличается в определенных сценариях.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top