DateTime和DbNull.Value

时间:2012-12-03 12:32:34

标签: c#

有没有人知道为什么会这样:

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)));

3 个答案:

答案 0 :(得分:3)

原因是条件运算符是特定类型的表达式。编译器根据运算符的两个分支中的表达式类型来推断此特定类型 在您的代码中,编译器不能使用此特定类型,因为DBNull.Value_item.Created具有不同且不相关的类型。你不能将任何一个转换为另一个的类型。

要使其有效,请将至少一个分支投射到object

(_item.Created == DateTime.MinValue) ? (object)DBNull.Value : _item.Created

答案 1 :(得分:0)

当使用conditional operator时,条件的不同边(真分支和假分支)返回的两种类型应该相同或者可以隐式地相互转换。

DBNull.ValueDateTime不是这样的值。

答案 2 :(得分:0)

改为使用SqlDateTime

_item.Created == DateTime.MinValue ? SqlDateTime.Null : new SqlDateTime(_item.Created)