嵌套包含排序

时间:2014-07-08 19:34:05

标签: c# entity-framework entity-framework-6

我的数据结构如下所示:

main(main_id, name)
container(container_id), order, name)
item(item_id, name)
item_order(item_order_id, order, item_id)
  • 容器与主
  • 之间存在多对一关系
  • item_order和容器之间存在多对一关系
  • item_order和item之间存在一对一的关系(同一个项目可以显示在多个容器中,这就是订购信息存储在单独的表中而不是像容器一样存储的原因)

我想为特定主要做的是按升序选择所有容器,以及所有项目(通过它们的订单对象)按升序排列。

我尝试了The Example I Found Here,它对于对容器进行排序非常有用,我无法弄清楚如何扩展它以对容器中的项进行排序。

有谁知道如何做到这一点?

1 个答案:

答案 0 :(得分:2)

你不能。 EF按照它们恰好来自数据库的顺序实现嵌套集合。我们无法做context.containers.Include(c => c.Items.OrderBy(...))之类的事情。

Include方法是OrderBycontainer,但到目前为止还没有context.containers.Select(c => c.SortedItems)。偶尔会有一种痛苦,但我不希望这种情况很快发生变化。有一些替代方案:

  • 必要时订购商品(例如展示)

  • 将容器和项目投影到视图模型中,在该视图模型中对项目进行排序。

  • 在{{1}}中创建一个(未映射的)属性,如SortedItems。但请注意,此属性只能在实现对象时解决,{{1}}之类的查询会引发错误。