【问题标题】:Filter by nullable datetime field using Linq使用 Linq 按可为空的日期时间字段过滤
【发布时间】:2016-08-05 11:25:38
【问题描述】:

我正在尝试过滤 SQL 表中具有特定日期的所有行。如果该列不可为空,则它可以工作,但如果是,则失败。

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

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 指令或程序集引用? )

我想避免获取 所有 SQL 行,然后在 .NET 中进行过滤,因为我只对极少数行感兴趣。还有其他我目前看不到的方法吗?

【问题讨论】:

  • 在你的课程中 MyDate 被定义为 Nullable DateTime 吗?如果是这样,您的第二行不应该编译。如果不是,那么您的模型与数据库不匹配。

标签: c# linq datetime linq-to-sql linq-to-entities


【解决方案1】:

使用可空日期的值属性

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

【讨论】:

  • 更正你的答案,应该是,ent.MyTable.Where(e => e.MyDate.HasValue && e.Date.Value.Day == 12);
  • @AdilMammadov HasValue!= null 对于 Nullable 类型是等效的。
  • @Mostafiz 我得到的最快答案!非常感谢你。我会尽快接受答案:)
  • @user3185569 写成e.MyDate.Value != null
  • 为什么不赞成我已经从 sugesion 更新了我的答案,我现在又回到了原来的状态
【解决方案2】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2018-01-07
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 2020-11-27
    • 2016-12-09
    相关资源
    最近更新 更多