C# 在linq中使用任何条件处理WHERE中的空值
我的问题是db对象可以有一个空描述,ofc linq将抛出任何空异常。我用它来搜索描述和标题 这是密码C# 在linq中使用任何条件处理WHERE中的空值,c#,linq,C#,Linq,我的问题是db对象可以有一个空描述,ofc linq将抛出任何空异常。我用它来搜索描述和标题 这是密码 string[] searchQry = searchString.Split(' '); searchQry = searchQry.Select(sq=> sq.ToLower()).ToArray(); searchResult = x.reportsInfo .Where(r => searchQry.Any(y =>
string[] searchQry = searchString.Split(' ');
searchQry = searchQry.Select(sq=> sq.ToLower()).ToArray();
searchResult = x.reportsInfo
.Where(r =>
searchQry.Any(y => r.report.Description.ToLower().Contains(y)) ||
searchQry.Any(y => r.report.Title.ToLower().Contains(y)))
.ToList();
尝试用三元条件运算符封装它。如何:
y => r.report.Description?.ToLower().Contains(y) ?? false
如果说明为空
,则使用空传播运算符(?
)来避免空引用异常
,如果是空
,则使用空合并运算符(?
)来提供默认值(在这种情况下为false
)
顺便说一句,您可以将任何调用合并为一个调用:
searchQry.Any(r => r.report.Description?.ToLower().Contains(y) ?? false
|| r.report.Title.ToLower().Contains(y))
如果您想在将标准应用于标题
之前先将标准应用于每个描述
,那么您需要坚持使用两个单独调用的方法:
.Where(r => searchQry.Any(y => r.report.Description?.ToLower().Contains(y) ?? false)
|| searchQry.Any(y => r.report.Title.ToLower().Contains(y))).ToList();
另一种方法是在Any
之前使用Where
子句过滤掉描述
为空的记录:
searchResult = x.reportsInfo
.Where(r => searchQry.Where(r => r.report.Description != null)
.Any(y => r.report.Description.ToLower().Contains(y))
||searchQry.Any(y => r.report.Title.ToLower().Contains(y)))
.ToList();
ofc
引发了什么异常?向数据库提交了什么SQL?searchQry
中通常有多大(多少个条目)?x
和x.reportsInfo
的类型是什么?您正在使用实体框架吗?