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

C#使用Entity Framework查询SQL数据库时遭遇Null值错误

解决Entity Framework中LIKE查询的Null报错问题

报错原因分析

你遇到的两个Null报错根源在于两点:

  1. searchValue本身可能为Null,直接调用Contains(null)会触发ArgumentNullException
  2. 虽然用了a.Name ?? "",但部分EF版本或自定义DAL层可能无法将这个空合并逻辑转换为SQL,导致在客户端内存中处理数据时仍可能因Null值触发异常

无需修改数据库的解决方案

方案1:使用EF原生Like函数(推荐,数据库端执行)

利用EF.Functions.Like直接模拟SQL的LIKE语法,让查询在数据库端执行,天然适配Null字段(SQL中Null值匹配%xxx%会返回false,不会报错),同时提前处理searchValue的Null情况:

var context = new FILTER_SYSTEM_CONTEXT();
var connectionCompanies = new DAL_SYSTEM<Company>(context);
// 先将searchValue转为非Null字符串
var safeSearchValue = searchValue ?? string.Empty;
var searchByName = connectionCompanies
    .Where(a => EF.Functions.Like(a.Name, $"%{safeSearchValue}%"))
    .ToList();

方案2:兼容内存集合的处理(如果DAL返回IEnumerable)

如果你的DAL_SYSTEM<Company>返回的是内存集合(而非IQueryable),需要同时处理a.Name和searchValue的Null情况:

var safeSearchValue = searchValue ?? string.Empty;
var searchByName = connectionCompanies
    .Where(a => (a.Name ?? string.Empty).Contains(safeSearchValue))
    .ToList();

额外注意事项

  • 确保你的EF版本支持EF.Functions.Like(EF Core 2.0+、EF 6.2+均支持)
  • 如果searchValue是用户输入,建议先做Trim处理,避免无意义的空格匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:22:16