2010-12-27 8 views
5

Ich bin neu bei LINQ. Ich verstehe seinen Zweck. Aber ich kann es nicht genau herausfinden. Ich habe ein XML-Set, das wie folgt aussieht:LINQ zu XML über C#

<Results> 
    <Result> 
    <ID>1</ID> 
    <Name>John Smith</Name> 
    <EmailAddress>[email protected]</EmailAddress> 
    </Result> 
    <Result> 
    <ID>2</ID> 
    <Name>Bill Young</Name> 
    <EmailAddress>[email protected]</EmailAddress> 
    </Result> 
</Results> 

Ich habe diese XML in ein XDocument als solche geladen:

string xmlText = GetXML(); 
XDocument xml = XDocument.Parse(xmlText); 

Nun, ich versuche, die Ergebnisse in POCO-Format zu bekommen. In dem Bemühen, dies zu tun, verwende ich zur Zeit:

var objects = from results in xml.Descendants("Results") 
       select new Results 
       // I'm stuck 

Wie erhalte ich eine Sammlung von Ergebniselementen über LINQ? Ich bin besonders verwirrt über das Navigieren der XML-Struktur an dieser Stelle in meinem Code.

Vielen Dank!

Antwort

3

Dies wird eine IEnumerable der Rückkehr anonyme Klasse:

var q = from result in xml.Descendants 
     select new 
     { 
      ID = result.Descendants("ID"), 
      Name= result.Descendants("Name"), 
      EmailAddress= result.Descendants("EmailAddress") 
     }; 

oder wenn Sie definierte Klasse `Ergebnis haben, zum Beispiel:

class Result 
{ 
    public ID { get; set; } 
    public Name { get; set; } 
    public EmailAddress { get; set; } 
} 

dann:

var q = from result in xml.Descendants 
     select new Result 
     { 
      ID = result.Descendants("ID"), 
      Name = result.Descendants("Name"), 
      EmailAddress = result.Descendants("EmailAddress") 
     }; 

(kehrt IEnumerable<Result>)

+0

@ user70192: Froh, dass es geholfen hat! :) – abatishchev

0

Wenn Ihre Ergebnisse untergeordneten Elemente werden nur Elemente Ergebnis, dann kann man sich wie diese:

var objects = from result in xml.Descendants 
       select result; 

Aber in diesem glücklichen Fall können Sie nur XML.descendants verwenden.

Wenn es nicht nur die Elemente des Ergebnis, dann wird dies tun, fein:

var object = from result in xml.Descendants 
      where result.Name == "Result" 
      select result; 
0

Wenn Sie LINQ neu sind, werden Sie auch äußerst nützliche Links finden in this question

+0

Das ist wirklich nicht die Frage beantworten ... –

+0

Da die Frage schon beantwortet wurde (nur von 26.071.986 zu der Zeit), dachte ich, Das Hinzufügen eines Links zu dieser Frage, die mir sehr geholfen hat, könnte ihm auch bei seinen zukünftigen Problemen mit linq helfen. –

+0

BTW, 26071986 hat die Frage nicht beantwortet, weil sein Code 'IEnumerable ' anstelle von POCO zurückgibt – abatishchev