2017-07-06 101 views
0

對象的名單上有XML描述一些數據是這樣的:LINQ查詢創建其中每個對象包含一個列表

<People> 
    <Person> 
     <Name>Alice</Name> 
     <Dogs> 
      <Dog>Labrador</Dog> 
      <Dog>German Shepherd</Dog> 
     </Dogs> 
    </Person> 
    <Person> 
     <Name>Bob</Name> 
     <Dogs> 
      <Dog>Poodle</Dog> 
     </Dogs> 
    </Person> 
</People> 

和一些類:

class Person 
{ 
    public string Name { get; set; } 
    public List<Dog> Dogs { get; set; } 
} 

class Dogs 
{ 
    public string Type { get; set; } 
} 

我想使用LINQ XML來查詢這些數據,這樣我就可以爲每個人填充Dog集合來創建一組Person對象。我該怎麼做呢?喜歡的東西:

var doc = XDocument.Load("Test.xml"); 
var enumerableOfPeople = from u in doc.Root.Descendants("Person") 
        select new Person() { Name = u.Element("Name").Value, 
              Dogs = /* WHAT GOES HERE */ }; 
+0

你確定你的類是與您的代碼正確? – coderwill

+0

我在stackoverflow編輯器中編寫了上面的代碼,所以可能會有一些小錯誤,但我認爲它給出了一般想法。哪一位不正確讓我知道,我會修復它 – user555265

回答

2

這將填充狗:

var enumerableOfPeople = from u in doc.Root.Descendants("Person") 
         select new Person() 
         { 
           Name = u.Element("Name").Value, 
           Dogs = (from d in u.Element("Dogs").Descendants("Dog") 
             select new Dog() { Type = d.Value }).ToList() 
         }; 
1
var enumerableOfPeople = doc.Root.Descendants("Person") 
         .Select(u => new Person { 
          Name = u.Element("Name").Value, 
          Dogs = u.Descendants().Select(x => new Dog{ Type = x.Value}).ToList() 
         }); 
1

一個lambda的方法來獲得人們:

var peeps = doc.Root.Descendants("Person").Select(r => new Person() 
{ 
    Name = r.Element("Name").Value, 
    Dogs = r.Element("Dogs").Descendants("Dog").Select(t => new Dog() 
    { 
     Type = t.Value 
    }).ToList() 
}); 
+0

OP也使用LINQ。您正在使用LAMBDA語法 –

+0

@RomanoZumbéOh我以爲.Select等是linq – EpicKip

+0

兩者都是linq的一部分 –

相關問題