Почему люди пишут, что IEnumerable фильтрует данные из памяти, а IQueryable делает это на стороне сервера?C#

Место общения программистов C#
Ответить
Anonymous
 Почему люди пишут, что IEnumerable фильтрует данные из памяти, а IQueryable делает это на стороне сервера?

Сообщение Anonymous »

О stackoverflow существует много тем:
Когда мне следует использовать IEnumerable, а когда IQueryable?
В чем разница между IQueryable и IEnumerable?
Когда мне следует использовать IEnumerable и когда IQueryable?
В чем разница между IQueryable и IEnumerable
В этих сообщениях утверждается, что IEnumerable фильтрует данные из памяти, в то время как IQueryable делает это внутри серверная часть. Но я обнаружил, что это неточно.

Код: Выделить всё

IEnumerable
фильтрует данные из памяти только если мы разделяем запрос!
Например, если я использую IEnumerable вот так

Код: Выделить всё

IEnumerable customers = context.Customers.Where(c => c.FirstName.StartsWith("J")).Take(5).ToList();
он ​​дает правильный запрос с фильтром top(5):

Код: Выделить всё

select top(5) * from Customers WHERE FirstName like 'j%';
Это означает, что Where и Take закодированы в запросе и выполняются на сервере, что противоречит утверждениям в сообщениях выше.С другой стороны, если я разделю запрос:

Код: Выделить всё

IEnumerable customers = context.Customers.Where(c => c.FirstName.StartsWith("J"));
var result = customers.Take(5).ToList(); //the filter is in a different line of code
он ​​выдает запрос без top(5):

Код: Выделить всё

select * from Customers WHERE FirstName like 'j%';
что означает, что часть Take(5) выполняется в памяти.
Почему люди до сих пор утверждают, что IEnumerable фильтрует данные из памяти, а IQueryable делает это на стороне сервера?

Подробнее здесь: https://stackoverflow.com/questions/784 ... e-iqueryab
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»