Запрос Linq to Entities дважды попадает в БД

У меня есть следующий довольно простой запрос linq, запрашивающий linq для объектов edmx.

(from i in ent.Inspectors select i).OrderBy(s => s.Surname).Skip((page - 1) * count).Take(count).ToList();

В Sql Server Profiler я вижу, что один и тот же запрос на выборку отправляется дважды.

Может кто-нибудь объяснить, почему?

Ваше здоровье,

Дэйв


person DavidGouge    schedule 08.10.2009    source источник
comment
Можете ли вы убедиться, что строка кода, которую вы описываете, не срабатывает дважды?   -  person Joseph    schedule 08.10.2009
comment
Вы уверены, что оно на самом деле отправляется дважды? SQL Profiler по умолчанию показывает один и тот же запрос более одного раза. Можешь показать след?   -  person Craig Stuntz    schedule 08.10.2009
comment
@Крейг. Бинго! Спасибо за ответ. Взглянув на трассировку более чем беглым взглядом, я увидел, что один из них был BatchStarting, а другой — BatchCompleted. ‹хлопает по лбу›.   -  person DavidGouge    schedule 12.10.2009


Ответы (2)


Из-за отложенного выполнения результаты запроса не кэшируются локально. Чтобы этого не произошло, добавьте в запрос вызов ToArray.

Кроме того, from i in ent.Inspectors select i не работает; вы должны написать ent.Inspectors.OrderBy(s => s.Surname)....

person SLaks    schedule 08.10.2009
comment
Да, но это в конце. Если один из предыдущих методов не будет переведен L2E, он все равно может сработать дважды. - person SLaks; 08.10.2009
comment
Все эти методы известны L2E. Если есть что-то важное, о чем он нам не сообщает, это должен быть только один запрос. - person Craig Stuntz; 09.10.2009
comment
Спасибо за ответы. @Slacks, хорошая мысль о замене from i на ... Если бы запрос должен был продолжать получать все, я бы так и сделал, но на данный момент это только отправная точка. :D - person DavidGouge; 12.10.2009

Является ли ent.Inspectors IEnumerable, содержащим два элемента?

person DamienG    schedule 08.10.2009