转换日期时遇空值报错如何处理?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
相关产品推荐
相关产品推荐

