ASP.NET - 通过SiteMapNode.ChildNodes枚举

时间:2009-12-25 03:08:21

标签: asp.net linq

我正在从我的web.sitemap文件中读取,我想将Linq OrderBy命令应用于ChildNode元素。但是,我似乎无法访问ChildNodes属性的OrderBy方法,除非我首先将它转换为SiteMapNode(由于它已经是SiteMapNode类型,因此是哑的)。请指出我正确的方向。

这是我的代码:

foreach (SiteMapNode childNode in node.ChildNodes.Cast<SiteMapNode>().OrderBy(x => x["name"]))

1 个答案:

答案 0 :(得分:4)

试试这个:

foreach (var childNode in node.ChildNodes.OrderBy(x => x.Key))

如果需要,将x.Key替换为其他属性。

http://msdn.microsoft.com/en-us/library/system.web.sitemapnode_members%28lightweight%29.aspx

实际上,SiteMapNodeCollection ChildNodes实施IList,但不是强类型IList<SiteMapNode>。您需要Cast

请参阅 http://msdn.microsoft.com/en-us/library/system.web.sitemapnodecollection.aspx

您可以随时为SiteMapNodeCollection推送扩展方法。

public static IEnumerable<SiteMapNode> OrderBy(this SiteMapNodeCollection smnc,
                                               Func<SiteMapNode, TKey> expression)
{
    return smnc.Cast<SiteMapNode>().OrderBy(expression);
}