2009-12-25 4 views
2

Je lis à partir de mon fichier web.sitemap, et je voudrais appliquer une commande Linq OrderBy aux éléments ChildNode. Cependant, je ne peux pas sembler accéder à la méthode OrderBy à la propriété ChildNodes sauf si je l'ai d'abord convertie en SiteMapNode (ce qui est stupide car il est déjà de type SiteMapNode). S'il te plait, oriente moi dans la bonne direction.ASP.NET - Énumérer via SiteMapNode.ChildNodes

Voici mon code:

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

Répondre

4

Essayez ceci:

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

Remplacer x.Key avec une autre propriété, le cas échéant.

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

En fait, SiteMapNodeCollection qui ChildNodes implémente IList, mais n'est pas le IList<SiteMapNode> fortement typé. Vous aurez besoin du Cast.

Voir http://msdn.microsoft.com/en-us/library/system.web.sitemapnodecollection.aspx

Vous pouvez toujours rouler une méthode d'extension pour SiteMapNodeCollection.

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

OrderBy n'est pas une méthode de la propriété ChildNodes. Mais quand je le lance, c'est. –