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
}
};
噢,是的,这是我一直在寻找的语法 – 2009-11-05 11:15:38