У меня есть метод в моем сгенерированном частичном классе, подобный этому:
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 и также поставлю их.