2014-09-22 27 views
0

我正在使用C#查詢數據庫並創建DataTable。從這個DataTable我使用LINQ to XML來創建一個XML文件。LINQ to XML:如果值爲DBNull.Value,請不要創建XAttribute

我的問題是,對於數據表中的空列,當我在元素上調用SetAttributeValue時,它會創建一個空白屬性。如果值爲nullSetAttributeValue(name, value)根本不會添加該屬性。有沒有一種方法可以模仿DBNull.Value這種行爲?我不想檢查每一行和列,看看值是否等於DBNull.Value

預計:

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

實際:

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

代碼元素1:

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; 
+1

將添加具有預期行爲和不預期行爲的XML文件。 – 2014-09-22 19:41:26

+0

你可以顯示從DataTable轉換到Xml的代碼嗎? – 2014-09-22 20:01:42

回答

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); 
    } 
}