2009-07-07 62 views
1

嗨我想要返回可能有空日期值的集合。 但是,如果它們爲空 - 我想保留它們,而不是僅僅使用任意日期。處理從數據庫返回的空日期

如果它是一個字符串,我會檢查是否有像這樣空值:

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

我怎麼會做同樣的約會? 以下不編譯('null'和System.DateTime'之間沒有隱式轉換)。

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

我的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 2009-07-07 00:16:51

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 <>不兼容。

我懷疑有人會需要全套Sql類型作爲C#模板或將ICOnvertible添加到它們以便能夠只有一個或兩個模板化方法。

如果有人有一個功能把戲或兩個說話的想法:-)