C# 1 LINQ查询中的Multilpe对象初始值设定项

C# 1 LINQ查询中的Multilpe对象初始值设定项,c#,linq,C#,Linq,我想知道如何使用XML文档在一个select语句中选择多个对象初始值设定项。我希望避免在同一个文件上进行多次迭代 XML结构如下所示: <root> <doc name="test.doc"> <version lang="nl"> </version> <version lang="fr"> </version> </doc> <doc name="test2.

我想知道如何使用XML文档在一个select语句中选择多个对象初始值设定项。我希望避免在同一个文件上进行多次迭代

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>
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")
           }
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 go中选择法语版本,伪代码如下:

<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>
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")
           }
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")
           }
有什么想法可以让我一次就完成吗?我知道我可以通过XML做两次往返,但那太愚蠢了,不是吗

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
               }
           };
另一个略有不同的选择:

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
               }
           };

哦,是的,这就是我要找的语法哦,是的,这就是我要找的语法