tobias
tobias

Reputation: 1590

Entity Framework Ordering Navigate Objects

i have a query like below

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

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

but i am using EF 4.2 and i try like this and watching by SQL Profiler,EF generate much more sql queries its nested,i want to only one query for this job like this

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

how is that possible?

Upvotes: 0

Views: 80

Answers (2)

y.selivonchyk
y.selivonchyk

Reputation: 9885

Query like that

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

can be implemented next way:

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();

Upvotes: 2

ken2k
ken2k

Reputation: 49013

You probably are looking for Include() that specifies related object to include in your result (i.e. which tables must be joined in your SQL request):

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

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

Edit: Are you sure your query makes sense? You're actually only selecting Module, so why are you trying to order Pages first?

Upvotes: 0

Related Questions