根据子元素的数量对SitemapNodes进行排序

时间:2011-03-29 12:00:45

标签: c# asp.net collections sitemap

在一个应用程序中,我正在从站点地图文件中读取它,将其添加到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.
}

可以为我提供前进的指导。

1 个答案:

答案 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.
}