【发布时间】:2012-05-30 20:41:25
【问题描述】:
我有一个使用 lambda 表达式的查询,我希望能够从作为父表的子集合的表中的列进行排序。查询如下所示:
var query = ctx.Timelines.Include("Rule.DocumentRules").Where(...).OrderBy(o => o.Rule.DocumentRules.OrderBy(t => t.SortOrder));
SortOrder 列位于时间线实体下方的 3 层深处,我不知道使用哪个扩展来访问它。当我使用上面的代码时,我收到一个错误“DbSortClause 表达式必须具有可与顺序比较的类型。 参数名称:key”。如果我使用 Select 扩展而不是 2nd OrderBy,我会遇到同样的错误。有人知道我如何按此列排序吗?此“SortOrder”列不是主键或外键。
谢谢
【问题讨论】:
-
按整个子实体序列排序是荒谬的。只有将子实体集合并为一个值,然后可以用于排序,这才有意义。这可以通过选择单个实体(通过
First())或使用聚合运算符(如Max和Sum)来完成。 -
您似乎要同时按多个事物排序?时间线和 documentRules 之间是否存在一对一的关系?
标签: c# asp.net entity-framework