在一个应用程序中,我正在从站点地图文件中读取它,将其添加到SiteMapNodeCollection
迭代它并根据某些条件呈现结果。
但是在传递这些SiteMapNodeCollection
进行操作之前,我需要根据子节点的数量对节点进行排序(包括子节点的子节点)。我想过使用Extension方法但是对使用它们很困惑,因为它是一个层次化的集合。
SiteMapDataSourceView siteMapView = (SiteMapDataSourceView)siteMapData.GetView(string.Empty);
//Get the SiteMapNodeCollection from the SiteMapDataSourceView
SiteMapNodeCollection nodes = (SiteMapNodeCollection)siteMapView.Select(DataSourceSelectArguments.Empty);
***//Need to sort the nodes based on the number of child nodes it has over here.***
//Recursing through the SiteMapNodeCollection...
foreach (SiteMapNode node in nodes)
{
//rendering based on condition.
}
可以为我提供前进的指导。
答案 0 :(得分:2)
您可以编写一个方法来计算指定节点的子节点数:
private static int GetChildNodeCount(SiteMapNode node)
{
var nodeCount = node.ChildNodes.Count;
foreach (SiteMapNode subNode in node.ChildNodes)
{
nodeCount += GetChildNodeCount(subNode);
}
return nodeCount;
}
然后像这样使用它:
var orderedNodes = nodes.Cast<SiteMapNode>()
.OrderBy(n => GetChildNodeCount(n));
foreach (SiteMapNode node in orderedNodes)
{
//rendering based on condition.
}