使用LINQ to XML为Object列表中的每个对象在同一级别上创建一对XElement
本文关键字:一级 XElement 创建 对象 XML to LINQ Object 列表 使用 | 更新日期: 2023-09-27 18:17:55
我正在尝试构建一个XML文档,应该输出,对于列表List<Journey> journeys
中的每个对象Journey
:
<Journeys>
<id>1</id>
<length>28</length>
<id>2</id>
<length>44</length>
etc.
</Journeys>
我尝试用以下代码使用LINQ到XML:
var journeyElement = new XElement("Journeys",
journeys.Select(j =>
new XElement("id", j.id),
new XElement("length", j.length));
这显然不是预期的语法。
var journeyElement = new XElement("Journey",
journeys.Select(j => new
{
id = new XElement("id", j.id),
length = new XElement("length", j.length)
}));
没有产生预期的结果。
如何继续从使用LINQ到XML的List
在同一级别上创建一对XElement
?
您可以将每个Journey
投影到包含两个元素的数组中,然后使用SelectMany
:
var journeyElement = new XElement("Journeys",
journeys.SelectMany(j => new[] { new XElement("id", j.id), new XElement("length", j.length) }));
生成所需的XML:
<Journeys> <id>1</id> <length>28</length> <id>2</id> <length>44</length> </Journeys>
如果您可以像这样更改XML结构,
<Journeys>
<Journey>
<id>1</id>
<length>28</length>
</Journey>
<Journey>
<id>2</id>
<length>44</length>
</Journey>
etc.
</Journeys>
这段代码可以运行。
List<Journey> journeys;
var journeyElement = new XElement("Journeys",
journeys.Select(j =>
new XElement("Journey",
new XElement("id", j.id),
new XElement("length", j.length)
)
)
);