Quelqu’un at-il une idée pourquoi cela fonctionne:
if (_item.Created == DateTime.MinValue) { ListSqlParam.Add(new SqlParameter("@TransactionCreated", DBNull.Value)); } else { ListSqlParam.Add(new SqlParameter("@TransactionCreated", _item.Created)); }
mais pas ceci:
ListSqlParam.Add(new SqlParameter("@TransactionCreated",((_item.Created == DateTime.MinValue) ? DBNull.Value : _item.Created)));
La raison en est que l’opérateur conditionnel est une expression d’un type spécifique. Ce type spécifique est inféré par le compilateur en fonction des types d’expressions dans les deux twigs de l’opérateur.
Dans votre code, ce type spécifique ne peut pas être déduit par le compilateur car DBNull.Value
et _item.Created
sont de types différents et non liés. Vous ne pouvez pas atsortingbuer l’un au type de l’autre.
Pour que cela fonctionne, convertissez au moins une twig en object
:
(_item.Created == DateTime.MinValue) ? (object)DBNull.Value : _item.Created
Lors de l’utilisation de l’ opérateur conditionnel , les deux types renvoyés par les différents côtés du conditionnel (les twigs vraie et fausse) doivent être identiques ou être implicitement convertibles l’un pour l’autre.
DBNull.Value
et DateTime
ne sont pas de telles valeurs.
Utilisez SqlDateTime à la place:
_item.Created == DateTime.MinValue ? SqlDateTime.Null : new SqlDateTime(_item.Created)