2016-08-05 69 views
0

我试图过滤具有特定日期的SQL表中的所有行。它适用于列不可为空的情况,但如果不成立则失败。使用Linq过滤可空的日期时间字段

这适用于不能为空日期时间字段:

ent.MyTable.Where(e => e.MyDate.Day == 12); 

显然,这不是工作为空的日期时间字段。做互联网上的一些搜索后,我发现很多的“解决方案”这个问题看起来像到以下几点:

ent.MyTable.Where(e => e.MyDate != null && e.MyDate.Day == 12); 

不幸的是,这并不为我工作的。而这是可以理解为什么如果我认为这是错误消息:

“System.Nullable”不包含“日”的定义,并没有扩展方法“日”接受一个类型的第一个参数“System.Nullable”可以找到(是否缺少using指令或程序集引用?)

我想避免获取所有 SQL行,然后在.NET滤波器,因为我只对极少数行的兴趣。有没有其他的方式,我目前没有看到?可空日期

ent.MyTable.Where(e => e.MyDate.HasValue && e.Date.Value.Day == 12); 
+0

是'MyDate'类中的定义为可空'DateTime'?如果是这样,你的第二行不应该编译。如果不是,那么你的模型与数据库不匹配。 – user3185569

回答

1

使用价值属性试试这个:

ent.MyTable.Where(e => e.MyDate.HasValue && e.MyDate.Value.Day == 12); 
+0

更正你的答案,应该是'ent.MyTable.Where(e => e.MyDate.HasValue && e.Date.Value.Day == 12);' –

+0

谢谢@AdilMammadov – Mostafiz

+0

@AdilMammadov'HasValue'和'! = null'对于可空类型是等效的。 – user3185569