2009-10-08 2 views
0

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

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

В профиле сервера Sql я вижу, что тот же самый запрос выбора отправляется дважды.

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

Приветствия,

Dave

+0

Можете ли вы проверить, что строка кода, которую вы описываете, не ударяется дважды? – Joseph

+0

Вы уверены, что это * на самом деле * отправляется дважды? SQL Profiler по умолчанию будет показывать один и тот же запрос более одного раза. Можете ли вы показать след? –

+2

@Craig. Бинго! Спасибо за ответ. Давая трассировку больше, чем беглый взгляд человека, я мог видеть, что это был BatchStarting, а другой - BatchCompleted. . – DavidGouge

ответ

0

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

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

+0

У него уже есть ToList(). –

+0

Да, но это в конце. Если один из методов до него не переводится L2E, он все равно может попасть дважды. – SLaks

+1

Все эти методы известны L2E. Если нет чего-то существенного **, он не говорит нам, это должен быть только один запрос. –

1

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