?? 运算符未在DataTable DataRow中触发System.DBNull类型

Rea*_*tor 4 .net c# linq datatable null

这是.Net C#String的后续问题.如果元素值为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");
Run Code Online (Sandbox Code Playgroud)

当我将代码更改为:

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

我可以观察到其中包含有效数据System.Double的元素的数据类型是NULL,而元素的数据类型是NULL System.DBNull.难道??不是操作上System.DBNull

Mag*_*nus 7

DBNull,null也不是一回事.但你可以这样写:

select r[5] == DBNull.Value ? "null" : r[5]);
Run Code Online (Sandbox Code Playgroud)

另一种可能性是使用Field扩展方法,它将为您提供对指定行中每个列值的强类型访问,并且??运算符将起作用.

select r.Field<string>(5) ?? "null";
Run Code Online (Sandbox Code Playgroud)