在这种情况下合并操作员工作?
这个问题在这里已经有了答案:
DBNull
与null
不一样,所以你不能使用??
运营商。 你必须分开处理这个案子。
更换:
Make = (string)(rdr["Make"] ?? ""),
有:
Make = (rdr["Make"] == System.DBNull.Value ? "" : (string)rdr["Make"]),
SqlDataReader
返回一个DBNull对象,它不是C#空 - 它是一个表示数据库中NULL值的对象。
您有许多选项,并且创建一个方法来处理可能最具可读性的方法,并节省您重复的代码:
private static string GetStringOrEmpty(object dbValue){
return dbValue == System.DBNull.Value ? string.Empty : (string)dbValue;
}
接着
Make = GetStringOrEmpty(rdr["Make"]),
或者看看Dapper
,它是一个非常小但功能强大的ORM,可以为你处理很多这些东西。