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

转换日期时遇空值报错如何处理?ExitDate空值解决方案

解决ExitDate为空导致转换报错的几种方案

问题核心是当ExitDate为null或空字符串时,直接调用ConvertDateTime.ConvertShamsiToMiladi会触发转换异常,因为该方法无法处理空输入。以下是几种可行的处理方式:

方案一:在筛选时先判断空值,再执行转换

在Where条件中先校验ExitDate不为空,再调用转换方法,避免空值传入转换逻辑:

var testList = join2Tbl
    .Where(a => !string.IsNullOrWhiteSpace(a.ExitDate) 
                && ConvertDateTime.ConvertShamsiToMiladi(a.ExitDate) >= DateTime.Now.AddMonths(-1))
    .AsEnumerable();

方案二:修改转换方法,兼容空值输入

直接优化ConvertShamsiToMiladi方法,让它能处理空输入,返回null或指定默认值,这样外部调用时不会抛出异常:

public static DateTime? ConvertShamsiToMiladi(string shamsiDate)
{
    // 先判断空值
    if (string.IsNullOrWhiteSpace(shamsiDate))
        return null;
    
    // 原有转换逻辑
    // ... 你的转换代码
}

之后在筛选时可以这样处理(若转换后为null则不满足条件):

var testList = join2Tbl
    .Where(a => ConvertDateTime.ConvertShamsiToMiladi(a.ExitDate)?.AddMonths(1) >= DateTime.Now)
    .AsEnumerable();

方案三:提前在EF查询阶段过滤空值(业务允许的情况下)

如果业务逻辑中不需要处理ExitDate为空的记录,可以在最初的关联查询里就过滤掉这类数据,减少后续处理的数据集:

var join2Tbl = (from c in _context.Persons
                join p in _context.Projects on c.projectID equals p.projectID
                where p.projectID == id 
                      && !string.IsNullOrWhiteSpace(c.ExitDate) // 提前过滤空值
                select new ProjectViewModel()
                {
                    projectID = c.projectID,
                    PersonID = c.PersonID,
                    projectName = p.projectName,
                    Family = c.Family,
                    PersonName = c.PersonName,
                    PersonCode = c.PersonCode,
                    PersonAddress = c.PersonAddress,
                    PersonKasreBemeeVaMaliytState = c.PersonKasreBemeeVaMaliytState,
                    ExitDate = c.ExitDate
                }).AsEnumerable();

这样后续的Where筛选就不会遇到空值的情况了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:38:36