这是.Net C# String.Join how to output “null” instead of empty string if element value is null?的后续问题,答案建议使用??
运算符来定义自定义空值,但替换永远不会被触发。
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
无法运作吗?
答案 0 :(得分:6)
否DBNull
和null
不是一回事。
但你可以这样写:
select r[5] == DBNull.Value ? "null" : r[5]);
另一种可能性是使用Field
扩展方法,它将为您提供对指定行中每个列值的强类型访问,??
运算符将起作用。
select r.Field<string>(5) ?? "null";
答案 1 :(得分:3)
??
使用编程语言null
,而不是数据库DBNull
。
来自MSDN:
不要将面向对象编程语言中的null概念与DBNull对象混淆。在面向对象的编程语言中,null表示缺少对对象的引用。 DBNull表示未初始化的变体或不存在的数据库列。