EF4 - C#使用lambda表达式排序

时间:2011-03-09 18:24:46

标签: 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做同样的事情? 我无法理解如何指定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();

感谢。

1 个答案:

答案 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)返回详细信息。