web-dev-qa-db-ja.com

デフォルトのDateTime値を確認する方法は?

DateTime値に値があるかどうかを確認する必要があります。

いくつかのオプションがあります:

if (dateTime == default(DateTime))

または

if (dateTime == DateTime.MinValue)

またはヌル可能DateTime?を使用

if (nullableDateTime.HasValue)

個人的には、かなり読みやすいので、3番目のバージョンを好むでしょう。しかし、データベースには、nullでないと定義されたいくつかのdatetime列があります。そのため、場合によっては最初の2つのオプションを選択する必要があります。

ジェネリックを扱う際にdefaultキーワードを使用すべきだとどこかで読みましたが、この場合ははるかに読みやすいのではないでしょうか? 2番目のオプションを使用する場合、新しい空のDateTimeインスタンスのデフォルト値はDateTime.MinValueであり、実装の詳細の匂いがあることを知っている必要があります。

「ベストプラクティス」を使用するには、どのオプションを使用する必要がありますか?

45
dasheddot

私はおそらくこれを本当に明確にするでしょう:

// Or private, or maybe even public
internal static readonly DateTime MagicValueForNullDateTimeInNonNullableColumns
    = DateTime.MinValue;

わかりましたので、名前をわずかに言葉遣いを少なくしますが、あなたは私の言う意味を理解します。その値をどのように初期化するかはそれほど重要ではありません。何をしようとしているかは明らかです。

(もちろん、これが可能な場合はいつでもnull許容型を使用してください。特定の状況ではcould n'tを行うため、質問が行われたと想定しています。)

51
Jon Skeet

DateTime値に値があるかどうかを確認する必要があります。

Nullable<DateTime>を必要とする教科書の状況についてはかなり説明しました。私はそのオプションで行きます。

(値をnull以外のdb列に永続化する必要がある場合、明らかに何らかの変換レイヤーが必要になりますが、「マジック」値は可能な限りdbの近くに保持し、 C#コードはクリーンで慣用的です。)

16
LukeH

「ベスト」プラクティスは、ヌル可能DateTimeを使用することです。ヌル値の値タイプが作成されました正確に「マジック」番号を信頼しないという理由で。

このアプローチで最も重要なのはその意図です。「デフォルト」の日付/時刻を持つために、あなたのコンテキストで何をmeanしますか?

6
Igal Tabachnik

Getdate()を使用してデータベースにデフォルト値を設定してから、すべてのnull値をmin値または任意の値に更新できます。少なくとも1つの条件があります

0
Kuzgun