2013-05-18 12 views
4

这是对.Net C# String.Join how to output “null” instead of empty string if element value is null?的后续问题,其中答案建议使用??运算符来定义自定义空值,但替换从未被触发。??运算符没有在DataTable DataRow中触发System.DBNull类型

DataSet myDataSet = new DataSet(); 
mySqlDataAdapter.Fill(myDataSet); 
DataTable rotationData = myDataSet.Tables["Table"]; 

rotationValues = string.Join(", ", 
    from r in rotationData.Rows.OfType<DataRow>() 
    select r[5] ?? "null"); 

当我的代码改变为:

rotationValues = string.Join(", ", 
    from r in rotationData.Rows.OfType<DataRow>() 
    select r[5].GetType()); 

我可以观察到,对于在它们具有有效的数据元素的数据类型是System.Double而对于其是NULL元素的数据类型为System.DBNull??不适用于System.DBNull

回答

6

编号DBNullnull不是一回事。 但是你可以代替写:

select r[5] == DBNull.Value ? "null" : r[5]); 

另一种可能性是使用Field扩展方法,它会给你一个强类型访问每个指定行中的列值,而??运营商将正常工作。

select r.Field<string>(5) ?? "null"; 
+0

很好解释,谢谢! –

3

??运行在编程语言null,而不是数据库DBNull上。

MSDN

不要混淆空的概念与DBNull的对象面向对象的编程语言。在面向对象的编程语言中,null表示缺少对对象的引用。 DBNull表示未初始化的变体或不存在的数据库列。

相关问题