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

如何在Lambda表达式中判断CreatedDate为空时用备选日期做范围查询

问题:日期查询中字段为空时的替代逻辑处理

我原本通过CreatedDate字段筛选指定日期范围内的记录,但导入旧数据后部分记录无CreatedDate值,导致这部分记录无法被返回。需求是:当CreatedDate为空时,改用PlannedStartDate替代进行日期范围判断。

原代码

mainTables = mainTables.Where(d => 
   d.n.CreatedDate >= AdminSearchVm.AdminSearch.SubmittedFrom &&
   d.n.CreatedDate <= AdminSearchVm.AdminSearch.SubmittedTo);

我尝试的错误代码

mainTables = mainTables.Where(d => 
    d.n.CreatedDate == null ? d.n.PlannedStartDate :
    d.n.CreatedDate >= 
           AdminSearchVm.AdminSearch.SubmittedFrom && d.n.CreatedDate == null ? 
           d.n.PlannedStartDate : 
           d.n.CreatedDate <= AdminSearchVm.AdminSearch.SubmittedTo);

正确实现方案

可以使用**null合并运算符??**简化逻辑,先确定要用于判断的日期值,再统一做范围校验:

mainTables = mainTables.Where(d => 
    // 优先用CreatedDate,为空则用PlannedStartDate
    var targetDate = d.n.CreatedDate ?? d.n.PlannedStartDate;
    targetDate >= AdminSearchVm.AdminSearch.SubmittedFrom &&
    targetDate <= AdminSearchVm.AdminSearch.SubmittedTo);

如果你的环境不支持在Lambda表达式中直接声明变量,也可以写成:

mainTables = mainTables.Where(d => 
    (d.n.CreatedDate ?? d.n.PlannedStartDate) >= AdminSearchVm.AdminSearch.SubmittedFrom &&
    (d.n.CreatedDate ?? d.n.PlannedStartDate) <= AdminSearchVm.AdminSearch.SubmittedTo);

逻辑说明

  • d.n.CreatedDate ?? d.n.PlannedStartDate:当CreatedDate不为null时取其值,否则使用PlannedStartDate
  • 之后统一判断该目标日期是否在SubmittedFrom到SubmittedTo的范围内,逻辑清晰且避免重复判断
  • 注意:如果使用EF等ORM框架,需确认??运算符是否被支持(EF Core、EF6均支持,会转译为SQL的ISNULL或COALESCE函数)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:48:30