我的问题是 db 对象可以有 null 描述,并且 ofc linq 将抛出 ANY 的 Null 异常。我用它来搜索描述和标题。
这是代码
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
这使用 null 传播运算符 (?
) 来避免在 Description
为 null
的情况下出现 NullReferenceException
如果它是 null
,那么我们使用 null 合并运算符 (??
) 来提供默认值(在本例中为 false
)。
顺便说一句,您可以将两个 Any
调用合并为一个:
searchQry.Any(r => r.report.Description?.ToLower().Contains(y) ?? false
|| r.report.Title.ToLower().Contains(y))
如果您想先将条件应用于每个 Description
,然后再将其应用于 Title
,那么您需要坚持使用两个单独的 方法>任何
调用:
.Where(r => searchQry.Any(y => r.report.Description?.ToLower().Contains(y) ?? false)
|| searchQry.Any(y => r.report.Title.ToLower().Contains(y))).ToList();
另一种方法是在 Any
之前使用 Where
子句来过滤 Description
为空的记录:
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();
关于c# - 在 linq 中使用 ANY 条件处理 WHERE 内的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53564415/