You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LINQ日期范围查询如何包含DateTime可空列的null值记录

LINQ适配可空离店日期的入店状态查询实现

筛选规则

指定查询日期后,筛选目标用户当日处于入店状态的记录,判断标准:

  • 入店时间checkedIn早于等于查询日期
  • 离店时间checkedOut为可空DateTime类型:
    • 有值时需晚于等于查询日期
    • 为null代表用户未离店,只要入店时间符合要求即纳入结果
      原有LINQ写法未处理checkedOut为null的分支,会遗漏未离店的有效记录。

修正代码

直接在Where子句中补充null值判断逻辑,对齐SQL中ISNULL的处理效果:

// 若需忽略时分秒、仅按日期维度比对,统一取Date属性
var sdate = DateTime.Parse(query.filteredDate.ToString()).Date;
var queryResult = table.Where(x => 
    x.id == query.id 
    && sdate >= x.checkedIn.Date 
    && (x.checkedOut == null || sdate <= x.checkedOut.Value.Date)
).ToList();

逻辑说明

  • 入店时间判断保持原有规则,要求查询日期不早于入店时间
  • 离店时间判断拆分为两个或条件,满足任意一个即可:
    • checkedOut为null:用户尚未离店,入店时间符合就命中
    • checkedOut不为null:要求查询日期不晚于离店时间,和原有判断逻辑一致
  • 时间字段取.Date的写法,会被ORM翻译为SQL中的日期类型转换函数,和示例SQL中cast(xxx as date)的逻辑完全对齐,避免时分秒精度导致的匹配错误。

结果验证

以测试数据、查询日期2022/06/14、用户ID=111的场景验证:

  • checkedIn=2022-06-13、checkedOut=null的记录:满足条件,正常返回
  • checkedIn=2022-06-13、checkedOut=2022-06-14的记录:满足条件,正常返回
  • ID=758、checkedOut=2022-06-12的记录:用户ID不匹配且离店时间早于查询日期,被过滤
    返回结果和示例SQL的预期结果完全一致。

内容的提问来源于stack exchange,提问作者deanpillow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:45:34