2009-07-07 11 views
1

こんにちは、日付の値がnullの可能性があるコレクションを返そうとしています。 しかし、それらがnullの場合は、代わりに任意の日付を使用するのではなく、そのままにしておきたいと思います。それが文字列だった場合nullの日付を扱うのはdbから返されました

、私はこのようにのようなヌルかどうかを確認したい:

calEventDTO.occurrenceType = dr.IsDBNull(10) ? null : dr.GetString(10); 

は、どのように私は日付のために同じことをしますか? 以下はコンパイルされません( 'null'とSystem.DateTimeの間の暗黙的な変換はありません)。

calEventDTO.recurrenceID = dr.IsDBNull(9) ? null : dr.GetDateTime(9); 

My dtoはヌル値を処理するように設定されています。

public DateTime? recurrenceID 
    { 
     get { return _recurrenceID; } 
     set { _recurrenceID = value; } 
    } 

ヒント/ヘルプ/ポインタが大いに感謝しています。 おかげ

答えて

8

試してみてください。

calEventDTO.recurrenceID = dr.IsDBNull(9) ? null : (DateTime?) dr.GetDateTime(9); 

?演算子は、両方のオペランド(この場合はNULLとdr.GetDateTime(9))が同じ型であることが必要です。

+0

あなたは男です!ありがとう! – user17510

5

条件演算子は、通常ははるかに遅いあなたは、あなたが持っているので、DateTimeの?:

calEventDTO.recurrenceID = dr.IsDBNull(9) ? (DateTime?)null : dr.GetDateTime(9); 
0

にIsDBNull(int型)へのオペランドのいずれかをキャストするために結果を割り当てるかを考えていないような方法を使用してGetSqlInt32その後、DBNull.Valueをと比較したり、それ自身の.IsNullなどを用い:

​​

は、これまでいくつかのテンプレートソリューションを試みたが、無駄に。問題は、すべてのSql型(ここではSqlInt32)型は実際には構造体であり、すべてが.Valueプロパティを持ちますが、C#ではそれを処理するための実際のテンプレートがないことです。また、彼らは独自のINullableインターフェイスを持っていますが、これは.IsNullのみを持ち、Nyllable <>とは互換性がありません。

C#テンプレートとしてフルセットのSqlタイプが必要な場合や、1つまたは2つのテンプレートメソッドを持つためにICOnvertibleを追加する必要があると思われます。

誰かが機能的なトリックを持つアイデアを持っている場合や、2人が話す場合:-)

関連する問題