繁体   English   中英

LINQ to XML:如果值为DBNull.Value,则不要创建XAttribute

[英]LINQ to XML: Don't Create XAttribute if value is DBNull.Value

我正在使用C#查询数据库并创建一个DataTable 从这个DataTable我正在使用LINQ to XML创建XML文件。

我的问题是,对于数据表中的空列,当我在元素上调用SetAttributeValue时,它将创建一个空属性。 如果value为null SetAttributeValue(name, value)根本不添加属性。 有没有办法为DBNull.Value模仿此行为? 我不想检查每一行和每一列,以查看该值是否等于DBNull.Value

预期:

<Root>
    <Element1 E1="Test"/>
</Root>

实际:

<Root>
    <Element1 E1="Test" E2=""/>
</Root>

Element1的代码:

DataTable testTable = new DataTable();
testTable.Columns.Add("E1");
testTable.Columns.Add("E2");

testTable.Rows.Add("Test", DBNull.Value);

XElement element = new XElement("Element1");

element.SetAttributeValue("E1", testTable.AsEnumerable().Select(item => item["E1"]));
element.SetAttributeValue("E2", testTable.AsEnumerable().Select(item => item["E2"]));

return element;

给自己写一个扩展方法:

public static class Extension
{
    public static void SetAttributeValueEx(this XElement source, XName name, object value)
    {
        if (value == DBNull.Value) value = null;
        source.SetAttributeValue(name, value);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM