可空日期字段的LINQ DateTime格式

时间:2012-01-27 19:37:24

标签: linq

我有以下内容,我只需要从ReqDate和RepDeclined获取日期(不是日期时间),它们都是可以为空的日期时间字段。

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 个答案:

答案 0 :(得分:0)

待办事项

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

避免对空对象的.ToString调用引起的NullReferenceException。

在两种情况下都使用String.Format

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 = String.Format("{0:MM/dd/yyyy}",tf.ReqDeclined)
}).ToList() 

答案 1 :(得分:0)

曾经挣扎过一段时间。发现这对我有用。

var info = (from pr in db.Prog        
            join tf in db.In_Lens        
            on pr.PID equals tf.PID        
            select new { tf.ReqDate, tf.ReqDeclined}).ToList();

var infoFormatted = info.Select(x => new { ReqDate = x.ReqDate.HasValue?x.ReqDate.Value.ToString("MM/dd/yyyy"):"", ReqDeclined = x.ReqDeclined.HasValue?x.ReqDeclined.Value.ToString("MM/dd/yyyy"):""});