.Skip (). Take () в свойствах навигации Entity Framework выполняет SELECT * на моем SQL Server

У меня есть метод в моем сгенерированном частичном классе, подобный этому:

var pChildren = this.Children
    .Skip(skipRelated)
    .Take(takeRelated)
    .ToList();

Когда я смотрю на свой SQL Server, я вижу, что сгенерированный код выполняет ВЫБРАТЬ *. * ОТ ДЕТЕЙ Этот код взят непосредственно из моего класса, я проверил, что порядок моих пропусков / дублей - ПЕРЕД моим .ToList.

Если я удалю .ToList, эта строка будет быстрой (и в мою БД не будет отправляться SQL), но как только я попытаюсь выполнить foreach по результатам, я получу тот же SQL, отправленный на мою DB: ВЫБРАТЬ *. * ИЗ ДЕТЕЙ .

Есть ли что-то особенное, что мне нужно сделать при использовании .Skip и .Take в свойствах навигации моих объектов?

update

Я попытаюсь получить фактический сгенерированный SQL, В настоящее время я не настроен на это. Я нашел первый, потому что он отображается в списке SSMS «Недавно дорогие запросы».

Выполнение:

var pChildren = this.Children
    //.Skip(skipRelated)
    //.Take(takeRelated)
    .ToList();

возвращает ~ 4 000 000 строк и занимает ~ 25 секунд.

Выполнение:

var pChildren = this.Children
    //.Skip(skipRelated)
    .Take(takeRelated)
    .ToList();

возвращает ~ 4 000 000 строк и занимает ~ 25 секунд.

Как я уже сказал, я возьму сгенерированный для них SQL и также поставлю их.

8
задан Nate 28 December 2011 в 23:32
поделиться