2013-12-18 2 views
0

Если у меня есть запрос LINQ to Entities, который возвращает некоторые результаты, использует ли Take производительность? Я имею в виду, потому что в конце запроса мы говорим .Take(thisManyRecords), тогда он сначала возвращает все записи, а затем возвращается обратно ко мне thisManyRecords или это действительно с начала ограничивает поиск до thisManyRecords?Выполняет ли использование Take улучшить производительность?

+0

Моя база данных не является достаточно большим, так что я могу на самом деле проверить это себя и почувствовать разницу. –

+0

Это много покрывает в другом месте, вы обыскали вокруг? http://stackoverflow.com/questions/13062462/proper-way-to-construct-linq-queries-to-achieve-fastest-performance ... например. – Arran

+2

Напишите код в оба конца. Запустите код в обоих направлениях. Теперь вы знаете, что быстрее. –

ответ

1

Linq к объектам подразумевает EF и некоторый провайдер, который получает запросы.

Вам не нужны мешки с данными для проверки. Профайлер SQL покажет используемую инструкцию SQL.

Если вы применили .Take к источнику IQueryable. В итоге вы получите дерево выражений, которое можно отправить в db;

Context.Set(). Где (t => ??). OrderBy (t => t.??).Take (n);

результат отправления TOP (n).

Если вы, тем не менее, вынуждаете перечисление, например .ToList(), и сделали .Take(), то это относится к объектам памяти и не отправляется в БД.

Query Execution in EF explained

Смежные вопросы