实体框架排序导航对象

本文关键字:对象 导航 排序 框架 实体 | 更新日期: 2023-09-27 18:25:28

我有一个类似的查询

 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

这怎么可能?

实体框架排序导航对象

类似的查询

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

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