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

发布于 2024-10-27 20:11:09 字数 712 浏览 6 评论 0原文

在应用程序中,我正在读取站点地图文件,将其添加到 SiteMapNodeCollection 中,迭代它并根据某些条件呈现结果。

但在传递这些 SiteMapNodeCollection 进行操作之前,我需要根据子节点的数量对节点进行排序(包括是否有子子节点)。我想过使用扩展方法,但对使用相同的方法感到困惑,因为它是一个层次结构集合。

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

可以给我前进的指导。

In an application i am reading from sitemap file adding it on to a SiteMapNodeCollection Iterating through it and rendering the results based on some conditions.

But before passing on these SiteMapNodeCollection for the manipulation i need to sort the nodes based on the number of childnodes(including if any sub child nodes).I thought of using Extension methods but am confused on using the same,as it is a hierarchial collection.

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

could give me guidance on moving ahead.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

微暖i 2024-11-03 20:11:09

您可以编写一个方法来计算指定节点的子节点计数,如下所示:

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

You could write a method which calculates a subnodes count for the node specified like this:

private static int GetChildNodeCount(SiteMapNode node)
{
    var nodeCount = node.ChildNodes.Count;
    foreach (SiteMapNode subNode in node.ChildNodes)
    {
        nodeCount += GetChildNodeCount(subNode);
    }

    return nodeCount;
}

and then use it like this:

var orderedNodes = nodes.Cast<SiteMapNode>()
    .OrderBy(n => GetChildNodeCount(n));

foreach (SiteMapNode node in orderedNodes)
{
    //rendering based on condition.
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文