4

这是 .Net C# String.Join 的后续问题,如果元素值为 null,如何输出“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

4

2 回答 2

7

DBNullnull不是一回事。但是你可以这样写:

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

另一种可能性是使用Field扩展方法,它可以让您对指定行中的每个列值进行强类型访问,并且??操作符将起作用。

select r.Field<string>(5) ?? "null";
于 2013-05-18T07:55:13.927 回答
3

??对编程语言进行操作null,而不是对数据库进行操作DBNull

来自MSDN

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

于 2013-05-18T07:59:59.840 回答