使用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 ?

使用LINQ to XML为Object列表中的每个对象在同一级别上创建一对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)
                                    )
                                )
                            );