我正在从我的web.sitemap文件中读取,我想将Linq OrderBy命令应用于ChildNode元素。但是,我似乎无法访问ChildNodes属性的OrderBy方法,除非我首先将它转换为SiteMapNode(由于它已经是SiteMapNode类型,因此是哑的)。请指出我正确的方向。
这是我的代码:
foreach (SiteMapNode childNode in node.ChildNodes.Cast<SiteMapNode>().OrderBy(x => x["name"]))
答案 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);
}