在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做同样的事情? 我无法理解如何指定order by子句。 到目前为止我试过
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();
感谢。
答案 0 :(得分:3)
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_table
条目与detail_table
条目之间存在一对多的关系,您已经按master_table
条目进行了分组 - 因为它没有(对于编译器或一般而言)能够在detail_table
级别上表达该排序顺序是有意义的。
我会在枚举结果时强制执行 - master_table
条目的顺序已经正确,只需使用foo.detail_tables.OrderBy(x=>x.order_field)
返回详细信息。