2012-03-24 174 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