2010-11-24 3 views
0

J'ai la requête suivante (qui est imbriquée dans une requête plus grande):requête LINQ ToList ne pas mettre les données dans une liste, mais plutôt une liste élément un

PaymentType = (from paymenttype in offer.Elements(myns + "paymentTypes") 
       select paymenttype.Value).ToList() 

monen est un type XNamespace

l'arbre XML ressemble

<offer> 
    <paymentTypes> 
     <paymentType>One String</paymentType> 
     <paymentType>Another string</paymentTYpe> 
    </paymentTypes> 
</offer> 

PaymentType est défini comme:

List<string> PaymentType = new List<string>(); 

Lorsque mon code exécute, ce que je vois est un élément unique créé:

PaymentType[0] = "OneStringAnotherString" 

et non

PaymentType[0] = "OneString" 
PaymentType[1] = "AnotherString" 

Je ne peux pas régler ce que je fais mal. Des idées?

Répondre

1

Si vous le regardez dans le débogueur, il est plus facile de dire que ce que vous obtenez est l'élément paymentTypes. Si vous savez qu'il n'y a qu'un seul, le plus simple est d'ajouter le changement .elements() sur la fin pour obtenir les enfants:

 var results = (from paymenttype in offer.Elements("paymentTypes").Elements() 
         select paymenttype.Value).ToList(); 

Que vous obtient les 2 chaînes que vous recherchez.

+0

Solution plus élégante –

1

Le Value de <paymentTypes> dans votre exemple est "One StringAnother string".

Vous devez sélectionner le Value de chaque <paymentType> individuellement:

var query = from paymenttype in offer.Element(myns + "paymentTypes") 
            .Elements(myns + "paymentType") 
      select paymenttype.Value; 

List<string> PaymentType = query.ToList(); 

Ou, s'il y a plusieurs <paymentTypes>, la Value de chaque <paymentType> dans chaque <paymentTypes>:

var query = from paymenttypes in offer.Elements(myns + "paymentTypes") 
      from paymenttype in paymenttypes.Elements(myns + "paymentType") 
      select paymenttype.Value; 

List<string> PaymentType = query.ToList(); 
+0

Oui, avec la requête imbriquée, je n'ai pas pu faire la première partie ... cependant, vos deux instructions "from" sont ce dont j'avais besoin. Cela a résolu le !! –

0

Ce trouvera tout paymentType elements

var paymentTypes = (from paymentType 
        in offer.Descendants(myns + "paymentType") 
        select paymentType.Value).ToList(); 
Questions connexes