C# 1 LINQ查询中的Multilpe对象初始值设定项
我想知道如何使用XML文档在一个select语句中选择多个对象初始值设定项。我希望避免在同一个文件上进行多次迭代 XML结构如下所示: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.
<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
}
};
哦,是的,这就是我要找的语法哦,是的,这就是我要找的语法