【问题标题】:LINQ to XML: Don't Create XAttribute if value is DBNull.ValueLINQ to XML:如果值为 DBNull.Value,则不要创建 XAttribute
【发布时间】:2014-09-23 04:11:04
【问题描述】:

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

我的问题是,对于数据表中的空列,当我在元素上调用 SetAttributeValue 时,它​​会创建一个空白属性。如果值为nullSetAttributeValue(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;

【问题讨论】:

  • 您是否会添加具有预期和非预期行为的 XML 文件。
  • 能否展示一下从DataTable 到Xml 的转换代码?

标签: c# xattribute


【解决方案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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    相关资源
    最近更新 更多