2009-12-25 70 views
2

我正在阅读从我的web.sitemap文件,并且我想将一个Linq OrderBy命令应用于ChildNode元素。然而,我似乎无法访问ChildNodes属性的OrderBy方法,除非我首先将其转换为SiteMapNode(因为它已经是SiteMapNode类型),所以它不是。请指向正确的方向。ASP.NET - 枚举通过SiteMapNode.ChildNodes

这里是我的代码:

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

回答

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

其实SiteMapNodeCollectionChildNodes实现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); 
} 
+0

OrderBy不是ChildNodes属性的方法。但是,当我施放它时,它是。 – 2009-12-25 03:33:05