[英]LINQ to XML: Don't Create XAttribute if value is DBNull.Value
I am querying a database using C# and creating a DataTable
. 我正在使用C#查询数据库并创建一个
DataTable
。 From this DataTable
I am using LINQ to XML to create an XML file. 从这个
DataTable
我正在使用LINQ to XML创建XML文件。
My problem is that for null columns in the data table, when I call SetAttributeValue on an element, it creates a blank attribute. 我的问题是,对于数据表中的空列,当我在元素上调用SetAttributeValue时,它将创建一个空属性。
SetAttributeValue(name, value)
doesn't add the attribute at all if value is null
. 如果value为
null
SetAttributeValue(name, value)
根本不添加属性。 Is there a way to mimic this behavior for DBNull.Value
? 有没有办法为
DBNull.Value
模仿此行为? I don't want to check every single row and column to see if the value equals DBNull.Value
. 我不想检查每一行和每一列,以查看该值是否等于
DBNull.Value
。
Expected: 预期:
<Root>
<Element1 E1="Test"/>
</Root>
Actual: 实际:
<Root>
<Element1 E1="Test" E2=""/>
</Root>
Code for Element1: 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;
Write yourself an extension method: 给自己写一个扩展方法:
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.