2009-12-25 2 views
2

내 web.sitemap 파일에서 읽고 있는데, Linq OrderBy 명령을 ChildNode 요소에 적용하고 싶습니다. 그러나, 먼저 SiteMapNode에 캐스팅하지 않는 한 OrderBy 메서드에 ChildNodes 속성에 액세스 할 수 없습니다. 이미 SiteMapNode 유형이므로 바보입니다. 저를 올바른 방향으로 가르쳐주십시오. 필요한 경우ASP.NET - SiteMapNode.ChildNodes를 통해 열거

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

가 다른 속성을 x.Key 교체 :

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

답변

4

이 시도 :

여기 내 코드입니다. 사실

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

, ChildNodesIList를 구현하지만 강력한 형식 IList<SiteMapNode> 아니다 SiteMapNodeCollection. Cast이 필요합니다.

당신은 항상 SiteMapNodeCollection에 대한 확장 메서드를 롤백 할 수 http://msdn.microsoft.com/en-us/library/system.web.sitemapnodecollection.aspx

참조하십시오.

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

OrderBy는 ChildNodes 속성의 메서드가 아닙니다. 그러나 내가 그것을 던지면, 그것은 그렇다. –