DateTime和DbNull.Value
有谁知道为什么这样有效:
if (_item.Created == DateTime.MinValue) { ListSqlParam.Add(new SqlParameter("@TransactionCreated", DBNull.Value)); } else { ListSqlParam.Add(new SqlParameter("@TransactionCreated", _item.Created)); }
但不是这个:
ListSqlParam.Add(new SqlParameter("@TransactionCreated",((_item.Created == DateTime.MinValue) ? DBNull.Value : _item.Created)));
原因是条件运算符是特定类型的表达式。 编译器根据运算符的两个分支中的表达式类型来推断此特定类型。
在您的代码中,编译器不能使用此特定类型,因为DBNull.Value
和_item.Created
属于不同_item.Created
相关的类型。 您不能将任何一个转换为另一个的类型。
要使其工作,请将至少一个分支强制转换为object
:
(_item.Created == DateTime.MinValue) ? (object)DBNull.Value : _item.Created
使用条件运算符时 , 条件的不同边(true和false分支)返回的两种类型应该相同或者可以隐式地相互转换。
DBNull.Value
和DateTime
不是这样的值。
改为使用SqlDateTime :
_item.Created == DateTime.MinValue ? SqlDateTime.Null : new SqlDateTime(_item.Created)