从可以为空的日期时间获取日期?

时间:2012-11-21 17:34:16

标签: c# linq

我已将模型中的字段声明为可为空的日期时间,如此

public DateTime? CallNextDate {get;set;}

在我的aspx代码后面我正在使用这个linq:

q = q.AsQueryable()
    .Where(c => c.CallNextDate.Date < DateTime.Now.Date )
    .ToList();

c.CallNextDate.Date不可用。请建议如何解决它

3 个答案:

答案 0 :(得分:16)

好吧,如果你已经知道它是非null的,你可以使用Value来获取基础的非可空值:

q = q.AsQueryable()
     .Where(c => c.CallNextDate.Value.Date < DateTime.Now.Date)
     .ToList();

或者如果你想过滤它:

q = q.AsQueryable()
     .Where(c => c.CallNextDate.Value != null &&
                 c.CallNextDate.Value.Date < DateTime.Now.Date)
     .ToList();

强烈鼓励您获取今天的日期一次,并将其重复用于整个查询:

var today = DateTime.Today;
q = q.AsQueryable()
     .Where(c => c.CallNextDate.Value != null &&
                 c.CallNextDate.Value.Date < today)
     .ToList();

这会给你更多的一致性。顺便说一下,你应该考虑一下你是否肯定想要系统本地日期

(顺便说一句,你肯定需要使用AsQueryable吗?那是相对罕见的。)

答案 1 :(得分:5)

Nullable类型具有Value属性,表示基础类型:

q = q.AsQueryable()
    .Where(c => c.CallNextDate.Value.Date < DateTime.Now.Date )
    .ToList();

但是您需要检查以确保类型具有值。

q = q.AsQueryable()
    .Where(c => c.CallNextDate.HasValue && c.CallNextDate.Value.Date < DateTime.Now.Date )
    .ToList();

答案 2 :(得分:0)

要获取值,可以使用:

 GetValueOrDefault()

示例:

item.DOB是可为空的日期时间。

item.DOB.GetValueOrDefault().Year