实体框架订购导航对象

时间:2012-02-23 10:31:59

标签: c# .net linq entity-framework entity-framework-4

我有一个如下的查询

 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事件探查器观察,EF生成了更多嵌套的sql查询,我想这样的工作只有一个查询

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

怎么可能?

2 个答案:

答案 0 :(得分:2)

像那样查询

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

答案 1 :(得分:0)

您可能正在寻找指定要包含在结果中的相关对象的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