我正在使用kentico应用程序,我必须根据其中的子项删除包含父节点id或父节点parentnodeid的所有子项。 以下是截图:
在这张图片中,我们可以看到我们有一个名为membership的父节点,并且在一个名为 Blog 的子项中。节点id为583且有29个孩子的博客。现在我正在运行一个代码,并将该父项下的所有子数据作为列表。 以下是截图:
现在我必须从其父节点或父节点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);

我尝试使用此代码从列表中删除匹配的父项:
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())));
}

如果我知道特定节点有多少级别,这段代码工作正常。
但是如果某些节点没有那么多级别,那么在这种情况下,这段代码会给出异常。
如果发现任何问题,请告诉我。
答案 0 :(得分:0)
我对你所走的道路感到有些困惑。如果您想获取特定节点的所有子节点,为什么不直接获取NodeAliasPath所在的所有节点"The/Parent/Node/Path"+"/%"
?
这将选择所有子节点。
如果您只想获取一定数量的级别,则可以获取父级的NodeLevel,然后在查询中添加NodeLevel <= "+(ParentNodeLevel+2)
以仅抓取所有子级和孙级。
要排除某些节点,您还可以将&#34; NodeID放入(123,234)&#34;。
也许如果你能清楚地说出你想要实现的目标,我们可以更轻松地帮助你!
PS:我放了SQL,但是DocumentQuery对象在方法中有大部分,比如.WhereNotIn("NodeID", ListOfNodeIDsToExclude)