Asp.net mvc 按树排序并考虑父级
我在Kentico内部有这样的文档结构:Asp.net mvc 按树排序并考虑父级,asp.net-mvc,kentico,Asp.net Mvc,Kentico,我在Kentico内部有这样的文档结构: 容器1 儿童1 容器2 儿童2 容器3 儿童3 容器4 儿童4 我们目前正在选择所有“子”文档,然后按NodeLevel、NodeOrder、NodeName排序。这将产生一个按NodeName(字母顺序)排序的子级列表,因为它们都具有等效的NodeLevel和NodeOrder 是否有一种方法可以将它们的容器考虑在内进行分类?我们希望他们的顺序是孩子1,孩子2,孩子3,孩子4 更新:我早就应该提到,我们正在与Kentico一起使用M
- 容器1
- 儿童1
- 容器2
- 儿童2
- 容器3
- 儿童3
- 容器4
- 儿童4
更新:我早就应该提到,我们正在与Kentico一起使用MVC应用程序。因此,我不是直接进行数据库查询,而是使用Kentico提供的文档提供程序。这限制了我使用与DocumentQuery对象和LINQ表达式关联的方法。您可以在OrderBy子句中执行类似操作:
CASE WHEN NodeLevel == 1 THEN NodeName ELSE '' END
所以这是你的财产顺序。所做的是检查节点级别,如果文档的节点级别=1,则它将按NodeName对其进行排序,否则它将不会对其进行排序。这将仅订购NodeLevel 1项目
查看类似的答案I我想您可以使用
NodeParentID
加入页面(文档):
选择t1。[NodeID]
,t1.[NodeAliasPath]
,t1.[NodeName]
,t1.[NodeAlias]
,t1.[NodeParentID]
,t1.[NodeLevel]
,t1.[节点顺序]
,t2.[NodeAliasPath]作为[ParentPath]
,t2.[NodeOrder]作为[ParentOrder]
,t2。[NodeLevel]作为[ParentLevel]
从[CMS_树]t1
内部连接[CMS_-Tree]t2打开
t1.[NodeParentID]=t2.[NodeID]
由[家长命令]
并使用父级的NodeOrder
或NodeAliasPath
对数据进行排序
甚至可以通过API执行连接:
DocumentNodeDainFoProvider.GetDocumentNodes()
.Source(sourceItem=>sourceItem.Join(“NodeParentID”、“NodeID”))
在与Kentico支持人员讨论后,我们提出了一个稍微干净一点的解决方案:
.OrderBy(node => node.Parent.NodeOrder)
在我看来,这似乎是最干净的处理方法。对不起,我应该指定我们使用的是文档提供者,因为我们的网站是一个MVC网站,它从Kentico获取内容,所以我不会直接进行数据库查询。您仍然可以在DocumentQueries的OrderBy子句中使用它。对,我在问这个的OrderBy子句应该是什么。我在我的回答中发布了它<代码>当NodeLevel==1时按大小写排序,然后NodeName ELSE“”结束Oh。。。对不起,布伦登。我在看我的手机,没有看到原始答案,只有评论。这是一个很酷的答案。我要试一试。谢谢谢谢,洛奇。我应该提到,我们使用的是Kentico的MVC解决方案,而不是直接调用DB。很抱歉搞混了。