【发布时间】:2017-11-08 21:38:28
【问题描述】:
我正在使用 kentico 应用程序,我必须删除所有包含父节点 ID 或父节点 ID 的子项,基于其中的子项。 下面是截图:
在这张图片中,我们可以看到我们有一个名为 members 的父节点和一个名为 Blog 的子节点。在博客下,节点 ID 为 583,有 29 个子节点。现在我正在运行一个代码并将该父级下的所有子数据作为列表获取。 下面是屏幕截图:
现在我必须从列表中删除其 parentnodeid 或 parent-parent 节点 id 为 583 的所有子数据(博客)。
下面是用于获取所有父项和子项列表的代码:
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())));
}
如果我知道特定节点有多少级别,则此代码可以正常工作。
但是,如果某些节点没有那么高的级别,那么在这种情况下,此代码将给出异常。
如果发现任何问题,请告诉我。
【问题讨论】:
-
您提供的内容“看起来不错”。您可能想要发布的是您的代码,以便对其进行审查,以确保您正确使用 API 调用。
-
我已经编辑了我的问题并添加了代码以了解列表是如何生成的。我还添加了用于删除节点的代码。
-
那么具体的问题是什么?