使用Linq按可空日期字段进行过滤

4
我将尝试筛选SQL表中所有具有特定日期的行。如果列不可为空,它能够正常工作,但是如果可以为空,则失败。
以下是针对不可为空的datetime字段的处理方法:
ent.MyTable.Where(e => e.MyDate.Day == 12);

显然,这种方法不能用于可空的日期时间字段。在互联网上搜索后,我发现有许多“解决方案”看起来像以下内容:
ent.MyTable.Where(e => e.MyDate != null && e.MyDate.Day == 12);

很遗憾,这对我也不起作用。如果考虑以下错误信息,就可以理解为什么:
'System.Nullable'未包含“Day”的定义,并且没有接受类型为“System.Nullable”的第一个参数的扩展方法'Day'(您是否缺少using指令或程序集引用?)
我想避免在.NET中获取所有SQL行,然后进行筛选,因为我只对非常少量的行感兴趣。有没有其他我目前没有看到的方法?

你的类中是否将 MyDate 定义为可空的 DateTime 类型?如果是,那么你的第二行代码不应该编译通过。如果不是,那么你的模型与数据库不匹配。 - Zein Makki
2个回答

6

使用可空日期的值属性

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

更正你的答案,应该是 ent.MyTable.Where(e => e.MyDate.HasValue && e.Date.Value.Day == 12); - Adil Mammadov
@AdilMammadov 对于可空类型,HasValue!= null是等价的。 - Zein Makki
@Mostafiz,这是我收到的最快的答案!非常感谢。我会尽快接受这个答案 :) - user1000742
@user3185569 它被写成 e.MyDate.Value != null - Adil Mammadov
为什么要踩我?我已经根据建议更新了我的答案,现在已经恢复到原始状态。 - Mostafiz
显示剩余2条评论

2

试试这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接