C# 实体框架排序导航对象
我有一个问题如下C# 实体框架排序导航对象,c#,.net,linq,entity-framework,entity-framework-4,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.Modul
return this.Context.Modules
.Select(p => new
{
Module = p,
Page = p.Pages.OrderBy(c => c.AuthOrder)
}).ToList()
.Select(a => a.Module)
.ToList();
但我使用的是EF4.2,我试着这样做,通过SQL Profiler观察,EF生成的SQL查询比嵌套的查询多得多,我只想为这样的作业创建一个查询
select * from Modules m join Pages p on m.ID = p.Module_ID
order by p.AuthOrder
这是怎么可能的?您可能正在寻找指定要包含在结果中的相关对象(即,在SQL请求中必须联接哪些表):
编辑: 您确定您的查询有意义吗?实际上,您只选择了
模块
,那么为什么要先订购页面
?这样的查询
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();
ToList()操作需要两次吗?是的?我如何才能订购导航?@tobias但当您最终只选择模块而不选择页面时,为什么要订购页面?因为它在表中有一个订单(顺序)字段:),实际上它是一个站点菜单模型,一个模块有许多页面,页面必须在该菜单的每个模块下排序。此类型的返回类型是什么?我的方法是List,但它不转换。返回类型是匿名类型。你想得到什么,只有模块?然后在上面的查询中将“new{c,o}”替换为“c”。
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();