J'ai un DateTime?
que j'essaie de l'insérer dans un champ à l'aide d'un DbParameter
. Je suis de la création du paramètre, comme ceci:
DbParameter datePrm = updateStmt.CreateParameter();
datePrm.ParameterName = "@change_date";
Et puis je veux mettre la valeur de l' DateTime?
dans la dataPrm.Value
lors de la comptabilité pour null
s.
Je pensais au départ, je serais intelligent:
datePrm.Value = nullableDate ?? DBNull.Value;
mais qui échoue avec l'erreur
L'opérateur '??' ne peut pas être appliquée à des opérandes de type 'System.DateTime?' et 'Système.DBNull'
Donc je suppose que cela ne fonctionne que si le second argument est un non nullable version du premier argument. Alors je suis allé pour:
datePrm.Value = nullableDate.HasValue ? nullableDate.Value : DBNull.Value;
mais cela ne fonctionne pas, soit:
Type de l'expression conditionnelle ne peut pas être déterminé, car il n'y a pas de conversion implicite entre "Système".DateTime' et 'Système.DBNull'
Mais je ne veux pas convertir entre ces types!
Jusqu'à présent, la seule chose que je peux l'obtenir pour fonctionner est de:
if (nullableDate.HasValue)
datePrm.Value = nullableDate.Value;
else
datePrm.Value = DBNull.Value;
Est-ce vraiment la seule façon que je peux écrire ceci? Est-il possible d'obtenir un one-liner à l'aide de l'opérateur ternaire de travail?
Mise à jour: je ne comprends pas trop pourquoi ?? la version ne fonctionne pas. MSDN dit:
L' ?? l'opérateur renvoie la gauche opérande si elle n'est pas null, sinon elle renvoie l'opérande de droite.
C'est exactement ce que je veux!
Update2: eh Bien, c'était une sorte d'évidence à la fin:
datePrm.Value = nullableDate ?? (object)DBNull.Value;