0

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

我的问题是,对于数据表中的空列,当我在元素上调用 SetAttributeValue 时,它​​会创建一个空白属性。SetAttributeValue(name, value)如果值为 . 则根本不添加属性null。有没有办法模仿这种行为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;
4

1 回答 1

1

给自己写一个扩展方法:

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);
    }
}
于 2014-09-22T19:49:57.113 回答