をDateTime?
使用してフィールドに挿入しようとしているものがありDbParameter
ます。私は次のようにパラメータを作成しています:
DbParameter datePrm = updateStmt.CreateParameter();
datePrm.ParameterName = "@change_date";
そして、 sを考慮しながらDateTime?
の値をwhileに入れたいと思います。dataPrm.Value
null
私は最初は賢いと思いました:
datePrm.Value = nullableDate ?? DBNull.Value;
しかし、それはエラーで失敗します
演算子'??' タイプ「System.DateTime?」のオペランドには適用できません。および「System.DBNull」
したがって、2番目の引数が最初の引数のnull許容でないバージョンである場合にのみ機能すると思います。それで私は行きました:
datePrm.Value = nullableDate.HasValue ? nullableDate.Value : DBNull.Value;
しかし、それも機能しません:
'System.DateTime'と'System.DBNull'の間に暗黙の変換がないため、条件式のタイプを判別できません。
しかし、私はそれらのタイプ間で変換したくありません!
これまでのところ、私が仕事に取り掛かることができるのは次のとおりです。
if (nullableDate.HasValue)
datePrm.Value = nullableDate.Value;
else
datePrm.Value = DBNull.Value;
それは本当に私がこれを書くことができる唯一の方法ですか?三項演算子を使用してワンライナーを機能させる方法はありますか?
更新:なぜ私は本当にわかりませんか?バージョンが機能しません。MSDNによると:
?? 演算子は、nullでない場合は左側のオペランドを返し、そうでない場合は右側のオペランドを返します。
それがまさに私が欲しいものです!
Update2:それは最終的には明らかでした:
datePrm.Value = nullableDate ?? (object)DBNull.Value;