我在Kentico中有这样的文档结构:
我们目前正在选择所有" Child"文档然后按NodeLevel,NodeOrder,NodeName排序。这导致按NodeName(按字母顺序)排序的子列表,因为它们都具有等效的NodeLevel和NodeOrder。
有没有办法对它们进行排序以考虑其容器?我们希望他们按照孩子1,孩子2,孩子3,孩子4的顺序。
更新:我早就应该提到我们正在使用Kentico的MVC应用程序。因此,我不是直接进行数据库查询,而是使用Kentico提供的文档提供程序。这限制了我使用与DocumentQuery对象和LINQ表达式相关联的方法。
答案 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
使用父级NodeAliasPath
或DocumentNodeDataInfoProvider.GetDocumentNodes()
.Source(sourceItem => sourceItem.Join<DocumentNodeDataInfo>("NodeParentID", "NodeID"))
订购数据。
应该可以通过API执行连接:
public static final String TIMESTAMP = "TimeStamp(Unix)"
答案 2 :(得分:0)
在与Kentico支持人员交谈后,我们提出了一个稍微清洁的解决方案:
.OrderBy(node => node.Parent.NodeOrder)
在我看来,这似乎是解决这个问题的最简洁方法。