2010-12-27 12 views
5

Jestem nowy w LINQ. Rozumiem, że to jest cel. Ale nie mogę tego rozgryźć. Mam zestaw XML, który wygląda tak:LINQ do XML przez 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> 

mam załadowany ten XML do XDocument jako takie:

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

Teraz próbuję uzyskać wyniki do formatu POCO. W tym celu używam obecnie:

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

Jak uzyskać kolekcję elementów wyników za pośrednictwem LINQ? Jestem szczególnie zdezorientowany jeśli chodzi o poruszanie się strukturą XML w tym momencie w moim kodzie.

Dziękujemy!

Odpowiedz

3

będzie to powrót do IEnumerable z anonimowy klasy:

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

lub jeśli zdefiniowano klasę `rezultacie np

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

następnie:

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

(zwraca IEnumerable<Result>)

+0

@ user70192: Cieszę się, że pomogło! :) – abatishchev

0

Jeśli twoje dziecko elementy Wyniki są wynikać jedynie elementy, a następnie można je tak:

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

Ale w tym szczęśliwym przypadku można po prostu użyć xml.Descendants.

Jeżeli to nie tylko wynik elementy, to zrobi dobrze:

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

Jeśli jesteś nowy LINQ, można również znaleźć niezwykle użytecznych linków w this question

+0

To naprawdę nie odpowiedzieć na pytanie ... –

+0

Ponieważ pytanie zostało już odpowiedział (tylko przez 26071986 w czasie), pomyślałem że dodanie linku do tego pytania, które bardzo mi pomogło, mogłoby mu pomóc w jego przyszłych problemach z linq. –

+0

btw, 26071986 nie odpowiedział na pytanie, ponieważ jego kod zwraca 'IEnumerable ' zamiast POCO – abatishchev