在Lambda表达式中强制转换可为空的DateTime

时间:2019-07-22 13:18:16

标签: c# asp.net-mvc entity-framework-6

使用EF6,我想从数据库CALENDRIER中获取2019年的所有对象,但是EF6生成可为空的DateTimes“ DateTime?”。而不是通常的DateTimes。因为我只想要年份,所以可以使用DateTime中的Year字段来过滤列表,但是它不适用于可为null的DateTime。基本上我想这样使用它:

_db.CALENDRIERs.Where(c => c.CALE_DATE.Year == year).ToList();

但是出现以下错误:

  

“ DateTime?”不包含“年”的定义,并且没有可访问的扩展方法“年”接受类型为“ DateTime?”的第一个参数。可以找到...

如何在lambda表达式中隐式转换它们?

3 个答案:

答案 0 :(得分:5)

首先检查CALE_DATE是否具有值,然后使用.Value

_db.CALENDRIERs.Where(c => c.CALE_DATE.HasValue && c.CALE_DATE.Value.Year == year).ToList();

答案 1 :(得分:1)

您必须访问可为空类型的Value字段:

DateTime? nullableDt = DateTime.Now;
int year = nullableDt.Value.Year;

答案 2 :(得分:0)

您可以先检查DateTime对象是否不为null,即它具有值,然后可以从中获取Year属性。

_db.CALENDRIERs.Where(c => c.CALE_DATE.HasValue && c.CALE_DATE.Year == year).ToList();