2012-03-24 3 views
0

при выполнении LINQ У меня эта ошибка. «Невозможно неявно преобразовать тип« System.DateTime? » to 'System.DateTime'. Явное преобразование существует (вы пропускаете листинг?) «LINQ Query Issue DateTime conversion

Я знаю его из-за типа данных, но Convert не работает, есть ли другой способ сделать это. вот мой код.

 {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. Если вы уверены, что Nullable DateTime содержит значение, то вы можете сделать:

Edob =t.Edob.Value 

Или, если вы не уверены, что это имеет значение:

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

Thanx .. .I пробовал и работал отлично Edob = t.Edob.Value – Naveed

+0

Naveed, как я уже упоминал, это не удастся, если t.Edob.Value равно null. Поэтому вам, возможно, придется обойти это, если вы на 100% не уверены, что этого никогда не будет, хотя это очень редко. –

0

Вы могли бы сделать

Edob = (DateTime)t.Edob 

но будет сгенерировано исключение, если t.Edob является недействительным. Лучше всего было бы предоставить дату и время по умолчанию, если Edob имеет значение null. Здесь полезен оператор коллаборации NULL.

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

Я попробовал их, но оба они были дающими же ошибка ... – Naveed

+0

Это действительно работает, но ответ Даррена немного более изящный. Обратите внимание, что, как мы уже говорили, вы получите избыточное время NullReferenceException, если t.Edob имеет значение null, если вы не используете нулевую коалесцирующую версию. – StuartLC

+0

hmm. , .thats right – Naveed