мой запрос linq вытягивает только то, что ему нужно или все? - PullRequest
2 голосов
/ 22 февраля 2011

Я делаю что-то вроде этого:

var src = dbContext.Set<Person>().Where(o => o.LastName.StartsWith(search));
var page = src.OrderBy(u => u.Id).Skip((page - 1) * pageSize).Take(pageSize);
var count = src.Count();

ef вытягивает из базы все и после выполняет запрос или нет?откуда мне это знать?как это выяснить?

(сначала используйте код ef4 ctp5)

Ответы [ 2 ]

3 голосов
/ 22 февраля 2011

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

Вот запрос Linq и результаты: LinqPad query results

Вот тот же самый запрос Linq вместе с исполняемым SQL: LinqPad query with SQL

Это очень хороший инструмент для написания и оптимизации запросов Linq to EF и Linq to SQL. Он также отлично подходит для написания и тестирования фрагментов кода .Net.

Этот инструмент сэкономил мне столько времени просто потому, что вам не нужно запускать отладчик! Это самый полезный инструмент .Net, который я нашел за последние годы.

1 голос
/ 22 февраля 2011

Ни один из используемых вами вызовов не является оператором To* (например, ToList), поэтому все вызовы методов будут преобразованы в SQL и выполнены в базе данных.Тем не менее, оператор Count оценивается сразу, вы можете отложить это назначение до места, где вам действительно нужно значение.Другие переменные будут оценены после итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...