У меня есть запрос linq, который выбирает несколько полей из моей таблицы клиентов.
К этому методу применяются несколько фильтров, использующих Func<IQueryable<T>, IQueryable<T>>
с .Invoke
.
Исходный запрос по существу select * from customer
.
Метод фильтра по существу select top 10
Выходной SQL равен select top 10 from (select * from customer)
В моей таблице клиентов более 1 000 000 строк, поэтому выполнение этого запроса в SSMS занимает около 7 секунд. Если я изменю выходной SQL на select top 10 from (select top 10 * from customer)
, запустив его в SSMS, тогда запрос будет мгновенным (как и следовало ожидать).
Мне интересно, знает ли кто-нибудь, что может привести к тому, что LINQ не будет так хорошо сочетать их, и есть ли лучший метод / обходной путь, который я могу применить.
Я должен отметить, что мой действительный код не выбран * он выбирает несколько полей, но нет ничего более сложного.
Я использую SQL Server 2008 и MVC 3 со структурой объекта (не знаю, какая версия)
Редактировать: я должен добавить, что он полностью IQueryable, ничего не оценивается до конца, и в результате длинное выполнение ограничивается этой единственной строкой.