1

有谁知道为什么会这样:

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

3 回答 3

3

原因是条件运算符是特定类型的表达式。该特定类型由编译器根据运算符的两个分支中的表达式类型推断出来。
在您的代码中,编译器无法推断此特定类型,因为DBNull.Value并且_item.Created是不同且不相关的类型。您不能将其中任何一种转换为另一种的类型。

要使其工作,请将至少一个分支转换为object

(_item.Created == DateTime.MinValue) ? (object)DBNull.Value : _item.Created
于 2012-12-03T12:35:18.320 回答
0

改用SqlDateTime

_item.Created == DateTime.MinValue ? SqlDateTime.Null : new SqlDateTime(_item.Created)
于 2012-12-03T12:40:06.810 回答
0

使用条件运算符时,条件不同侧(真和假分支)返回的两种类型应该相同或可以隐式相互转换。

DBNull.Value并且DateTime不是这样的值。

于 2012-12-03T12:34:40.383 回答