2009-11-05 37 views
1

我想知道如何使用XML文檔在1選擇語句中選擇多個對象初始值設定項。我想避免在同一個文件上進行多次迭代。1 LINQ查詢中的多重對象初始值設定項

的XML結構如下:

<root> 
    <doc name="test.doc"> 
    <version lang="nl"> 
    </version> 
    <version lang="fr"> 
    </version> 
    </doc> 
    <doc name="test2.doc"> 
    <version lang="nl"> 
     <title>Document over ons</title> 
    </version> 
    <version lang="fr"> 
     <title>Document de nous</title> 
    </version> 
    </doc> 
</root> 

1元的LINQ語句應該是這樣的:

var docs = select e from xmlDoc.Descendants("doc") 
      select new docEntry() 
      { 
      Name = (string)e.Attribute("name"), 
      Title = (string)element.Elements("version").Where(d => (string)d.Attribute("language_code") == "nl").First().Element("title") 
      } 

現在我想選擇1法語版本去也,僞代碼是這樣的:

var docs = select e from xmlDoc.Descendants("doc") 
      select new docEntry() 
      { 
      Name = (string)e.Attribute("name"), 
      Title = (string)element.Elements("version").Where(d => (string)d.Attribute("language_code") == "nl").First().Element("title") 
      }, 
      select new docEntry() 
      { 
      Name = (string)e.Attribute("name"), 
      Title = (string)element.Elements("version").Where(d => (string)d.Attribute("language_code") == "fr").First().Element("title") 
      } 

任何想法,我怎麼能做到這一點在1去?我知道我可以通過XML進行2次往返,但那會很愚蠢,不是嗎?

回答

4
var docs = from e in xmlDoc.Descendants("doc") 
      select new 
      { 
       NL = new docEntry 
       { 
       Name = e.Attribute("name").Value, 
       Title = e.Elements("version").Where(d => d.Attribute("language_code").Value == "nl").First().Element("title").Value 
       }, 
       FR = new docEntry 
       { 
       Name = e.Attribute("name").Value, 
       Title = e.Elements("version").Where(d => d.Attribute("language_code").Value == "fr").First().Element("title").Value 
       } 
      }; 

另外,略有不同的選項:

var docs = from e in from xmlDoc.Descendants("doc") 
      select new[] 
      { 
       new docEntry 
       { 
       Name = e.Attribute("name").Value, 
       Title = e.Elements("version").Where(d => d.Attribute("language_code").Value == "nl").First().Element("title").Value 
       }, 
       new docEntry 
       { 
       Name = e.Attribute("name").Value, 
       Title = e.Elements("version").Where(d => d.Attribute("language_code").Value == "fr").First().Element("title").Value 
       } 
      }; 
+0

噢,是的,這是我一直在尋找的語法 – 2009-11-05 11:15:38

相關問題