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

使用C# Lambda查询时将Excel字符串转为DateTime遇错求助

解决ACE.OLEDB读取Excel日期字符串在Lambda查询中的解析异常

问题根源

  1. 空引用异常(String reference not set to an instance of a String.):存在Date of Birth字段值为null的行,直接调用DateTime.Parse时传入了null参数,触发异常。
  2. 格式解析异常(String was not recognized as a valid DateTime.):部分行的字符串不符合DD MMM YYYY格式(比如含多余空格、月份缩写错误、非日期内容等),Convert.ToDateTime无法正常解析。

解决方案

使用DateTime.TryParseExact方法,它既能精准匹配指定日期格式,又不会因无效值抛出异常,同时提前过滤null/空字符串:

var cultureInfo = new CultureInfo("en-GB");
// 匹配DD MMM YYYY格式,注意小写dd(日)、yyyy(年),MMM是月份英文缩写
const string dateFormat = "dd MMM yyyy";

var getOldDates = dt
    .AsEnumerable()
    .Where(row => 
    {
        var dateStr = row.Field<string>("Date of Birth");
        // 先过滤null或空字符串的行
        if (string.IsNullOrWhiteSpace(dateStr))
            return false;
        
        // 尝试精准解析日期,Trim()处理字符串前后可能存在的空格
        if (DateTime.TryParseExact(dateStr.Trim(), dateFormat, cultureInfo, DateTimeStyles.None, out var dob))
        {
            return dob.Date.Year == 1900;
        }
        // 解析失败的行直接排除
        return false;
    });

额外说明

  • 如果需要保留解析失败的行,可以在Where逻辑中添加自定义处理(比如标记为无效日期),而不是直接返回false。
  • 确保dateFormat与Excel中的日期格式完全匹配,MMM会自动兼容月份缩写的大小写差异(如Jan或JAN)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 16:22:07