Entity framework 4 EF4-C#使用lambda表达式进行排序

Entity framework 4 EF4-C#使用lambda表达式进行排序,entity-framework-4,lambda,sql-order-by,Entity Framework 4,Lambda,Sql Order By,我可以用SQL写 SELECT a.*, b.* FROM master_table a LEFT JOIN detail_table b ON (b.a_id = a.id) ORDER BY a.id, b.order_field EF4也可以这样做吗? 我无法理解如何通过子句指定订单。 到目前为止我试过了 List<master_table> l = context.master_table.Include("detail_table"). OrderBy(x=>x.i

我可以用SQL写

SELECT a.*, b.*
FROM master_table a
LEFT JOIN detail_table b ON (b.a_id = a.id)
ORDER BY a.id, b.order_field
EF4也可以这样做吗? 我无法理解如何通过子句指定订单。 到目前为止我试过了

List<master_table> l = context.master_table.Include("detail_table").
OrderBy(x=>x.id).
ThenBy( //here is the problem, y=>y.detail_table.order_filed doesn't compile, 
//y=>y.detail_tables.OrderBy(z=>z.order_field) - throws a run-time exception
).
ToList();
List l=context.master\u table.Include(“detail\u table”)。
OrderBy(x=>x.id)。
ThenBy(//问题出在这里,y=>y.detail\u table.order\u字段未编译,
//OrderBy(z=>z.order\u字段)-引发运行时异常
).
托利斯特();

谢谢。

LINQ to Entities中的语法可以类似于您的SQL查询:

var result = from a in context.master_table
             join b in context.detail_table on a.id equals b.a_id
             orderby a.id, b.order_field
             select new { /*...*/};
编辑:

从您的评论中可以看出,问题在于,在SQL查询中,您有一对要加入的项(a,b),而在Linq to Entities查询中,您正试图通过导航属性确定二级顺序

区别在于
master\u表
条目和
detail\u表
条目之间存在一对多的关系。在这种情况下,您已经有了一个按
master\u表
条目分组的分组,因为它(对编译器或一般来说)没有意义能够在
detail_表
级别上表示排序顺序


当您枚举结果时,我会强制执行它,
master\u表
条目已经按照正确的顺序,只需使用
foo.detail\u表.OrderBy(x=>x.order\u字段)返回详细信息

谢谢您的回答,但这并不是我想要的。。。我可能表达得不清楚。我想获得
主表
实体的列表,包括按
顺序字段
排序的详细信息(
详细信息
)。也许我正在尝试做一些不可能的事情。@a1ex07:这个LINQ查询怎么会与您最初的SQL查询示例不匹配?对我来说,这看起来很相配。谢谢你的额外解释