根据树中的父节点id删除所有子数据

时间:2017-06-07 13:35:24

标签: asp.net treeview kentico

我正在使用kentico应用程序,我必须根据其中的子项删除包含父节点id或父节点parentnodeid的所有子项。 以下是截图:

Tree Image 1

在这张图片中,我们可以看到我们有一个名为membership的父节点,并且在一个名为 Blog 的子项中。节点id为583且有29个孩子的博客。现在我正在运行一个代码,并将该父项下的所有子数据作为列表。 以下是截图: List of parent and child image

现在我必须从其父节点或父节点id为583( Blog )的列表中删除所有子数据。

以下是用于获取所有父项和子项列表的代码:



 TreeProvider tree = new TreeProvider();
    var childNodeDataSet = tree.SelectNodes(childNodeId, null, SiteContext.CurrentSiteName);
    var getAllChildItems = childNodeDataSet.Items[0].AllChildren;
    var getItems = getAllChildItems.ToList().OrderBy(a=>a.NodeAliasPath);



 正如我们在上面看到的那样,childNodeId只是Membership页面节点id。使用这个我得到所有的儿童用品。 现在在这个getItems中我拥有所有值,我必须完全删除博客页父母和孩子。

我尝试使用此代码从列表中删除匹配的父项:



 string excludeFileName = "583, 683, 686, 687";
                    string[] arrStringList = excludeFileName.Split(',');
                    foreach (var excName in arrStringList)
                    {
                        getItems.RemoveAll(a => (a.NodeID == Convert.ToInt32(excName.Trim()) || a.NodeParentID == Convert.ToInt32(excName.Trim()))
                        || (a.Parent.NodeID == Convert.ToInt32(excName.Trim()) || a.Parent.NodeParentID == Convert.ToInt32(excName.Trim()))
                        || (a.Parent.Parent.NodeID == Convert.ToInt32(excName.Trim()) || a.Parent.Parent.NodeParentID == Convert.ToInt32(excName.Trim()))
                        || (a.Parent.Parent.Parent.NodeID == Convert.ToInt32(excName.Trim()) || a.Parent.Parent.Parent.NodeParentID == Convert.ToInt32(excName.Trim())));
                    }




如果我知道特定节点有多少级别,这段代码工作正常。

但是如果某些节点没有那么多级别,那么在这种情况下,这段代码会给出异常。

如果发现任何问题,请告诉我。

1 个答案:

答案 0 :(得分:0)

我对你所走的道路感到有些困惑。如果您想获取特定节点的所有子节点,为什么不直接获取NodeAliasPath所在的所有节点"The/Parent/Node/Path"+"/%"

这将选择所有子节点。

如果您只想获取一定数量的级别,则可以获取父级的NodeLevel,然后在查询中添加NodeLevel <= "+(ParentNodeLevel+2)以仅抓取所有子级和孙级。

要排除某些节点,您还可以将&#34; NodeID放入(123,234)&#34;。

也许如果你能清楚地说出你想要实现的目标,我们可以更轻松地帮助你!

PS:我放了SQL,但是DocumentQuery对象在方法中有大部分,比如.WhereNotIn("NodeID", ListOfNodeIDsToExclude)