Entity Framework Порядок навигации по объектам - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть запрос, как показано ниже

 return this.Context.Modules
               .Select(p => new
               {
                   Module = p,
                   Page = p.Pages.OrderBy(c => c.AuthOrder)

               }).ToList()
               .Select(a => a.Module)
               .ToList();

но я использую EF 4.2 и пытаюсь вот так и наблюдаю за SQL Profiler, EF генерирует гораздо больше SQL-запросов, вложенных в него, я хочу только один запрос для этой работы, такой как

select * from Modules m join Pages p on m.ID = p.Module_ID
order by p.AuthOrder

как это возможно?

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Запрос такой

select * from Modules m join Pages p on m.ID = p.Module_ID
order by p.AuthOrder

может быть реализовано следующим образом:

var q = (from c in Context.Modules
            join o in Context.Pages on c.ID equals o.Module_ID
            orderby o.AuthOrder
            select new {c, o}).ToList();
0 голосов
/ 23 февраля 2012

Вы, вероятно, ищете Include(), который указывает связанный объект для включения в ваш результат (то есть, какие таблицы должны быть объединены в вашем запросе SQL):

return this.Context.Modules.Include("Pages")
               .Select(p => new
               {
                   Module = p,
                   Page = p.Pages.OrderBy(c => c.AuthOrder)

               }).ToList()
               .Select(a => a.Module)
               .ToList();

Редактировать : Вы уверены, что ваш запрос имеет смысл? На самом деле вы выбираете только Module, так почему вы сначала пытаетесь заказать Pages?

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