7

我已将模型中的一个字段声明为可以为空的日期时间,如下所示

public DateTime? CallNextDate {get;set;}

在我后面的 aspx 代码中,我正在使用这样的 linq:

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

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

4

3 回答 3

18

好吧,如果你已经知道它是非空的,你可以使用它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吗?这是比较少见的。)

于 2012-11-21T17:36:38.600 回答
5

可空类型有一个表示底层类型的 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();
于 2012-11-21T17:37:33.420 回答
-1

要获得您可以使用的值:

 GetValueOrDefault()

例子:

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

item.DOB.GetValueOrDefault().Year
于 2018-08-27T01:08:11.723 回答