按父级考虑按树排序

时间:2017-04-24 19:23:42

标签: asp.net-mvc kentico

我在Kentico中有这样的文档结构:

  • 容器1
    • 儿童1
  • 容器2
    • Child 2
  • 容器3
    • 儿童3
  • 容器4
    • Child 4

我们目前正在选择所有" Child"文档然后按NodeLevel,NodeOrder,NodeName排序。这导致按NodeName(按字母顺序)排序的子列表,因为它们都具有等效的NodeLevel和NodeOrder。

有没有办法对它们进行排序以考虑其容器?我们希望他们按照孩子1,孩子2,孩子3,孩子4的顺序。

更新:我早就应该提到我们正在使用Kentico的MVC应用程序。因此,我不是直接进行数据库查询,而是使用Kentico提供的文档提供程序。这限制了我使用与DocumentQuery对象和LINQ表达式相关联的方法。

3 个答案:

答案 0 :(得分:0)

您可以在OrderBy子句中执行以下操作:

CASE WHEN NodeLevel == 1 THEN NodeName ELSE '' END

所以这将在你的ORDER BY属性中。正在做的是检查节点级别,如果文档的节点级别= 1,那么它将按NodeName对其进行排序,否则它不会对其进行排序。这只会订购NodeLevel 1项。

查看类似的答案posted here

答案 1 :(得分:0)

我猜您可以使用SELECT t1.[NodeID] ,t1.[NodeAliasPath] ,t1.[NodeName] ,t1.[NodeAlias] ,t1.[NodeParentID] ,t1.[NodeLevel] ,t1.[NodeOrder] ,t2.[NodeAliasPath] AS [ParentPath] ,t2.[NodeOrder] AS [ParentOrder] ,t2.[NodeLevel] AS [ParentLevel] FROM [CMS_Tree] t1 INNER JOIN [CMS_Tree] t2 ON t1.[NodeParentID] = t2.[NodeID] ORDER BY [ParentOrder] 加入页面(文档):

NodeOrder

使用父级NodeAliasPathDocumentNodeDataInfoProvider.GetDocumentNodes() .Source(sourceItem => sourceItem.Join<DocumentNodeDataInfo>("NodeParentID", "NodeID")) 订购数据。

应该可以通过API执行连接:

public static final String TIMESTAMP        =       "TimeStamp(Unix)"

答案 2 :(得分:0)

在与Kentico支持人员交谈后,我们提出了一个稍微清洁的解决方案:

.OrderBy(node => node.Parent.NodeOrder)

在我看来,这似乎是解决这个问题的最简洁方法。