2010-12-27 16 views
5

Je suis nouveau à LINQ. Je comprends son but. Mais je ne peux pas tout à fait comprendre. J'ai un ensemble XML qui ressemble à ce qui suit:LINQ à XML via 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> 

J'ai chargé ce XML dans un XDocument comme tel:

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

Maintenant, je suis en train d'obtenir les résultats en format POCO. Dans un effort pour ce faire, je suis actuellement en utilisant:

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

Comment puis-je obtenir une collection d'éléments de résultat via LINQ? Je suis particulièrement confus à propos de la navigation dans la structure XML à ce stade de mon code.

Merci!

Répondre

3

Cela renverra un IEnumerable de classe anonyme:

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

ou si vous avez défini la classe `Résultat, par exemple:

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

alors:

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

(retourne IEnumerable<Result>)

+0

@ user70192: Heureux qu'il a aidé! :) – abatishchev

0

Si vos résultats sont des éléments enfants RESULTER éléments, vous pouvez les obtenir comme ceci:

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

Mais dans ce cas, la chance vous pouvez simplement utiliser XML.descendants.

Si elle est non seulement Résultat des éléments, cela fera l'affaire:

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

Si vous êtes nouveau à LINQ, vous trouverez également extrêmement liens utiles dans this question

+0

Cela ne répond pas vraiment à la question ... –

+0

Puisque la question a été déjà répondu (juste en 26071986 à l'époque), je pensais que l'ajout d'un lien à cette question, qui m'a beaucoup aidé, pourrait l'aider aussi dans ses futurs problèmes avec linq. –

+0

btw, 26071986 n'a pas répondu à la question car son code renvoie 'IEnumerable ' au lieu de POCO – abatishchev