我有一个如下的查询
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
怎么可能?
答案 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
?