Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 按树排序并考虑父级_Asp.net Mvc_Kentico - Fatal编程技术网

Asp.net mvc 按树排序并考虑父级

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

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

  • 容器1
    • 儿童1
  • 容器2
    • 儿童2
  • 容器3
    • 儿童3
  • 容器4
    • 儿童4
我们目前正在选择所有“子”文档,然后按NodeLevel、NodeOrder、NodeName排序。这将产生一个按NodeName(字母顺序)排序的子级列表,因为它们都具有等效的NodeLevel和NodeOrder

是否有一种方法可以将它们的容器考虑在内进行分类?我们希望他们的顺序是孩子1,孩子2,孩子3,孩子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。很抱歉搞混了。