1 LINQ查询中的多重对象初始值设定项

1 LINQ查询中的多重对象初始值设定项

问题描述:

我想知道如何使用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次往返,但那会很愚蠢,不是吗?

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