2010-11-24 2 views
0

Ich habe die folgende Abfrage (die in einer größeren Abfrage verschachtelt ist):Linq Abfrage ToList keine Daten in eine Liste setzen, sondern eine ein Element Liste

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

myns ist ein XNamespace Typ

die XML-Struktur sieht aus wie

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

Payment wie folgt definiert ist:

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

Wenn mein Code ausgeführt wird, was ich sehe ist ein einzelnes Element erstellt:

PaymentType[0] = "OneStringAnotherString" 

und nicht

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

Ich kann nicht klären, was ich falsch mache. Irgendwelche Ideen?

Antwort

1

Wenn Sie es im Debugger betrachten, ist es einfacher festzustellen, dass Sie das Element paymentsTypes erhalten. Wenn Sie wissen, gibt es nur eine, die einfachste Veränderung .elements() auf das Ende hinzuzufügen ist, die Kinder zu bekommen:

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

, dass Sie die 2 Strings bekommt Sie suchen.

+0

Elegantere Lösung –

1

Die Value von <paymentTypes> in Ihrem Beispiel ist "One StringAnother string".

Sie müssen die Value von jedem <paymentType> einzeln auswählen:

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

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

Oder, wenn es <paymentTypes> mehrere sind, die Value von jedem <paymentType> in jedem <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

Ja, mit der verschachtelten Abfrage konnte ich den ersten Teil nicht tun ... aber Ihre zwei "von" Anweisungen sind, was ich brauchte. Das hat es gelöst !! –

0

Dies wird alle finden paymentType Elemente

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