2012-01-27 3 views
0

У меня есть следующее, где мне нужно получить только дату (не datetime) из ReqDate и RepDeclined, которые являются полями с нулевым значением даты и времени.Linq get Date from DateTime nullable field

var info = from pr in db.Prog 
     join tf in db.In_Lens 
     on pr.PID equals tf.PID 
     select new 
     { ReqDate = String.Format("{0:MM/dd/yyyy}",tf.ReqDate), 
     ReqDeclinedDate = tf.ReqDeclined.ToString("MM/dd/yyyy") 
     }).ToList() 

Он не работает, поскольку ReqDate и RepDeclined являются полями с нулевым значением даты и времени. Я также попробовал String.Format, но не повезло.

В нем нет перегрузки для метода.

+2

Как правило, вам понадобится 'nullableDate.Value.ToString (format)', но я не уверен, что это будет работать с EF (или любым другим поставщиком, который вы используете). В нормальном коде вам нужно быть уверенным, что 'nullableDate' не является нулевым, иначе вы можете использовать' nullableDate.GetValueOrDefault() 'вместо Value. –

ответ

0

Вы можете попробовать это, более элегантно я думаю

var info = from pr in db.Prog 
     join tf in db.In_Lens 
     on pr.PID equals tf.PID 
     select new 
     { ReqDate = !string.IsNullOrEmpty(tf.ReqDate) ? string.Format("{0:MM/dd/yyyy}",tf.ReqDate) : string.Empty(), 
     ReqDeclinedDate = !string.IsNullOrEmpty(tf.ReqDeclined) ? tf.ReqDeclined.ToString("MM/dd/yyyy") : string.Empty() 
     }).ToList() 
0

Я просто изменил свой ответ .. в основном .. вам нужно вернуть пару дней в вашей новой коллекции .., а затем, когда вы используете эти значения, вы можете сделать String.Format(). Причина в LINQ сводится к SQL, и нет конвертера String.Format() (еще?).

поэтому, когда вы просматриваете результаты, вы можете трансформировать эти результаты для правильной отображения (например, String.Format (...)) .. но вы не сможете выбрать и преобразовать результаты в один оператор linq , вы могли бы сделать это LAMBDA (.ForEach()), который мог бы выполнять итерацию по результатам, однако это был бы просто способ, который я описал выше.

... насколько мне известно

+0

Спасибо. Я получаю следующее: LINQ to Entities не распознает метод «System.String Format (System.String, System.Object)», и этот метод не может быть переведен в выражение хранилища. »} –

+0

О, это верно. Я не думаю, что вы можете сделать много форматирования в запросе, потому что он попытается превратить его в SQL – hanzolo