Здесь особо не на что смотреть - он просто выберет все поля из таблицы Category
, поскольку вы вызываете AsEnumerable
, таким образом извлекая все данные из таблицы Category
в память. После этого вы находитесь в пространстве объектов. Ну, в зависимости от того, что делает this.GetProducts()
- и я предполагаю, что он делает другой запрос EF, извлекающий результаты в память. В таком случае я настоятельно рекомендую вам задать еще один вопрос с этим кодом и кодом вашего GetProducts
метода, чтобы мы могли взглянуть и переписать его более оптимальным образом. (Помимо этого, вы проецируетесь на сопоставленную сущность Model.Category
, которая снова не будет (и не должна) работать с Linq-to-Entities.)
Перед тем, как прочитать ваш запрос, я собирался порекомендовать сделать что-то вроде этого:
string sqlQueryString = ((ObjectQuery)qry).ToTraceString();
Но это не сработает, поскольку вы смешиваете Linq-to-Entities с Linq-to-объектами, и на самом деле у вас будет несколько запросов, выполненных в случае GetProducts
запросов EF. Вы можете отделить эту часть своим EF-запросом и увидеть SQL следующим образом:
string sqlString = nwEntitiesContext.CategorySet.ToTraceString();
но, как я упоминал ранее, это просто выберет все из таблицы Categories
.
В вашем случае (если вы не переписываете свой код радикальным образом) вы действительно хотите видеть, какие запросы выполняются против БД, когда вы выполняете код и перечисляете результаты запросов. См. Этот вопрос: точный запрос sql, выполняемый Entity Framework
Вы можете выбрать SQL Server Profiler
и Entity Framework Profiler. Вы также можете попробовать LinqPad
, но в целом я все же рекомендую вам более подробно описать, что делают ваши запросы (и, скорее всего, переписать их более оптимальным образом, прежде чем продолжить).
person
Yakimych
schedule
29.04.2011