2010-12-27 36 views
5

Tôi mới sử dụng LINQ. Tôi hiểu mục đích của nó. Nhưng tôi không thể tìm ra được. Tôi có một bộ XML trông giống như sau:LINQ to XML qua 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> 

Tôi đã nạp XML này thành một XDocument như vậy:

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

Bây giờ, tôi đang cố gắng để có được kết quả thành định dạng POCO. Trong nỗ lực thực hiện việc này, tôi hiện đang sử dụng:

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

Làm cách nào để có được tập hợp các phần tử kết quả qua LINQ? Tôi đặc biệt bối rối về việc điều hướng cấu trúc XML tại thời điểm này trong mã của tôi.

Cảm ơn bạn!

Trả lời

3

này sẽ trả về một IEnumerable của lớp nặc danh:

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

hoặc nếu bạn đã xác định lớp 'Kết quả, ví dụ:

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

thì:

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

(trả IEnumerable<Result>)

+0

@ user70192: Rất vui được! :) – abatishchev

0

Nếu các yếu tố kết quả đứa trẻ của bạn chỉ được quả các yếu tố, sau đó bạn có thể nhận được chúng như thế này:

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

Nhưng trong trường hợp may mắn này, bạn chỉ có thể sử dụng xml.Descendants.

Nếu nó không chỉ quả các yếu tố, thì điều này sẽ làm tốt:

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

Nếu bạn chưa quen với LINQ, bạn cũng sẽ tìm thấy các liên kết vô cùng hữu ích trong việc this question

+0

này không thực sự trả lời câu hỏi ... –

+0

Kể từ khi câu hỏi đã được trả lời (chỉ bằng cách 26.071.986 vào thời điểm đó), tôi nghĩ thêm một liên kết cho câu hỏi đó, điều đã giúp tôi rất nhiều, có thể giúp anh ta trong các vấn đề tương lai của mình với LINQ. –

+0

btw, 26071986 không trả lời câu hỏi vì mã của anh ta trả về 'IEnumerable 'thay vì POCO – abatishchev

Các vấn đề liên quan