从List <t>创建XElement,其中T.property为null </t>

时间:2011-06-16 11:17:05

标签: c# linq

我正在从Web服务接收数据。进来的XML类似于:

<data>
    <item>
        <code>a</code>
        <price>2.89</price>
    </item>
    <item>
        <code>a</code>
        <price>2.89</price>
        <colour>blue</colour>
    </item>
</data>

因此,我们看到一个项目具有Color的附加属性。

好的,这会被转换为List&lt; item&gt;这就是我抓住它的地方。

我需要将此列表转换为XDocument。

使用:

var xml = new XDocument(
new XDeclaration("1.0", "utf-16", "yes"),
new XElement("data",
from i in myList
select new XElement("item",
new XElement("price", i.price),
new XElement("code", i.code),
new XElement("colour", i.colour))));

(我从记忆中输入了这个,所以借口拼写)

这里错误,因为i.colour为空。

我该如何应对?

提前致谢

格里夫

2 个答案:

答案 0 :(得分:3)

在尝试访问之前,您需要检查i.colour是否为null

您可以使用null-coalescing运算符整齐地执行此操作,如:

new XElement("colour", i.colour ?? ""))));

如果i.colournull,则假设您想要一个空字符串作为值。

<强>更新

根据您在下面的评论,如果您不希望在i.colour为null时添加该元素,则将其创建为XDocument实例,并根据需要添加。

var xml = new XDocument(...);

if(i.colour != null)
{
  xml.Add(new XElement(...));
}

}

答案 1 :(得分:2)

为避免在XElement为空时添加新的colour,您可以使用ternary operator并根据需要返回null或新的XElement

var xml = new XDocument(
    new XDeclaration("1.0", "utf-16", "yes"),
    new XElement("data",
    from i in myList
    select new XElement("item",
        new XElement("price", i.price),
        new XElement("code", i.code),
        i.colour == null ?
            null : new XElement("colour", i.colour)
    )));