DateTime et DbNull.Value

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)