C#使用Entity Framework查询SQL数据库时遭遇Null值错误
解决Entity Framework中LIKE查询的Null报错问题
报错原因分析
你遇到的两个Null报错根源在于两点:
searchValue本身可能为Null,直接调用Contains(null)会触发ArgumentNullException- 虽然用了
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
相关产品推荐
相关产品推荐

