2012-03-24 170 views
0

而做LINQ我得到這個錯誤。 「不能隱式轉換類型'System.DateTime?'到'System.DateTime'。顯式轉換存在(你是否缺少一個演員?)「LINQ查詢發佈日期時間轉換

我知道它是因爲數據類型,但轉換不工作是否有任何其他方式來做到這一點。 這是我的代碼。

 {var tvr = from t in ce.tbl_TVRinfo 
        where t.TVRID == fTVRid 
        select new TVRDetails 
        { 
         TVRID = t.TVRID, 
         Ename = t.Ename, 
         Esdw = t.Esdw, 
         Edob =t.Edob, //this field is causing date conversion error 
         Epob = t.Epob, 
         Equalification = t.Equalification, 
         NIC = t.NIC, 
         EAddress = t.EAddress 
        } 
     return tvr.ToList(); 
     } 

回答

1

您試圖將Nullable DateTime分配給標準DateTime。如果你有信心,可爲空的DateTime包含一個值,那麼你可以這樣做:

Edob =t.Edob.Value 

或者,如果你不知道它有一個值:

Edob = t.Edob.HasValue ? t.Edob.Value : SomeOtherValidDateTimeValue 
+0

Thanx ..。我試過了,它的工作正常Edob = t.Edob.Value – Naveed 2012-03-24 11:16:23

+0

Naveed,正如我所提到的,如果t.Edob.Value爲null,則會失敗。所以你可能需要解決這個問題,除非你100%確信它永遠不會如此,儘管這種情況很少。 – 2012-03-24 11:23:10

0

你可以做

Edob = (DateTime)t.Edob 

但如果t.Edob爲null,將引發異常。 如果Edob爲空,更好的辦法是提供一個默認的日期時間。 NULL合併運算符在這裏很有用。

Edob = t.Edob ?? DateTime.Now // Or DateTime.MinValue, or whatever makes sense in your situation 
+0

我想他們,但兩人都給予相同錯誤... – Naveed 2012-03-24 11:17:34

+0

它確實有用,但是@ Darren的回答有點優雅。請注意,正如我們都說過的,如果t.Edob爲空,除非使用空合併版本,否則會得到NullReferenceException的時間。 – StuartLC 2012-03-24 11:24:59

+0

hmm。 。 .that正確 – Naveed 2012-03-24 12:02:20