В чем разница между IQueryable < T > и IEnumerable < T & gt ;?

Я бы рекомендовал хранить все даты в UTC, когда они помещаются в базу данных. Это будет согласованным.

Хранение таких дат, похоже, работает хорошо ...

YYYY-MM-DD
405
задан Community 23 May 2017 в 12:26
поделиться

2 ответа

В первую очередь, IQueryable<T> расширяется эти IEnumerable<T> интерфейс, таким образом, что-либо, что можно сделать с "плоскостью" IEnumerable<T>, можно также сделать с IQueryable<T>.

IEnumerable<T> просто имеет GetEnumerator() метод, который возвращается Enumerator<T>, для которого можно назвать MoveNext() метод для итерации через последовательность [1 116] T.

, Что IQueryable<T> имеет, это IEnumerable<T> не делает , два свойства в particular— тот, который указывает на поставщик запроса (например, LINQ поставщику SQL) и другой указывающий выражение запроса, представляющее эти IQueryable<T> объект как абстрактное синтаксическое дерево во время выполнения проходимое, которое может быть понято под данным поставщиком запроса (по большей части, Вы не можете дать LINQ SQL-выражению к LINQ поставщику Объектов без выданного исключения).

выражение может просто быть константным выражением самого объекта или более сложного дерева составленного набора операторов запроса и операндов. Поставщик запроса IQueryProvider.Execute() или IQueryProvider.CreateQuery() методы называют с , Выражение передало ему, и затем или результат запроса или другой IQueryable возвращаются, соответственно.

247
ответ дан Hakam Fostok 23 May 2017 в 12:26
поделиться

Главная разница - то, что операторы LINQ для IQueryable<T> берут Expression объекты вместо делегатов, означая логику пользовательского запроса, которую это получает, например, предикат или селектор значения, в форме дерева выражений вместо делегата в методе.

  • IEnumerable<T> является большим для работы с последовательностями, которые выполнены с помощью итераций в оперативной памяти, но
  • IQueryable<T> допускает из вещей памяти как источник удаленных данных, таких как база данных или веб-сервис.

Выполнение запросов:

  • то, Где выполнение запроса будет выполненным "в процессе" , обычно все, которое это требуется, является кодом (как код) для выполнения каждой части запроса.

  • , Где выполнение будет выполнено из процесса , логика запроса должна быть представлена в данных, таким образом, что поставщик LINQ может преобразовать его в соответствующую форму для выполнения из памяти - является ли это запросом LDAP, SQL или что бы то ни было.

[еще 1129] в:

http://www.codeproject.com/KB/cs/646361/WhatHowWhere.jpg

190
ответ дан 9 revs, 3 users 70% 23 May 2017 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: