2009-02-17 5 views
0

J'ai un tas de listes déroulantes que je remplis à partir d'un fichier xml en utilisant linq. J'ai essayé ce qui suit pour les remplir et ça marche d'une certaine façon, le seul problème est que lorsqu'un élément manque, par exemple. sous-titre Je reçois un espace vide dans la liste déroulante. En outre, je ne reçois pas les valeurs distinctes de chaque liste déroulante mais toutes les valeurs. Voir ci-dessous le code meilleur moyen de remplir une liste déroulante avec linq à xml

var feeds = (from item in doc.Descendants("item") 

        select new 
        { 
         channel = (string)item.Element("channel") ?? null, 
         specialtoken = (string)item.Element("specialtoken") ?? null, 
         subchannel = (string)item.Element("subchannel") ?? null, 
         subtitle = (string)item.Element("subtitle") ?? null, 
        }).ToList().Distinct(); 


     cboChannel.DataSource = feeds; 
     cboChannel.DataBind(); 

     cboSpecialToken.DataSource = feeds; 
     cboSpecialToken.DataBind(); 

     cboSubChannel.DataSource = feeds; 
     cboSubChannel.DataBind(); 

     cboSubtitle.DataSource = feeds; 
     cboSubtitle.DataBind(); 
     ...And so on.... 

Y at-il une meilleure façon que de diviser chaque élément de valeur dans une requête séparée par exemple ?

Cheers, Chris

var specialtoken = (from item in doc.Descendants("item") 
        select new 
        { 
         specialtoken = (string)item.Element("specialtoken") ?? null, 
        }).ToList().Distinct(); 


var channel= (from item in doc.Descendants("item") 
        select new 
        { 
         channel = (string)item.Element("channel") ?? null, 
        }).ToList().Distinct(); 
etc. etc. 

Répondre

1

Je pense que la meilleure façon est de garder la requête initiale mais faire une sous requête pour chacun des bas de chute qui assure il y a une valeur dans l'élément qu'ils se soucient .

cboChannel.DataSource = feeds.Where(x => !String.IsNullOrEmpty(x.channel)).ToList(); 

Je trouve cela d'être beaucoup plus concise

+0

HMMH, c'est ce que je pensais. Il semble qu'il n'y ait pas vraiment de manière élégante de gérer cette situation. Merci quand même pour le pourboire. – Chris

Questions connexes