如果 linq 中的字段值为空,如何使用 Contains() 函数

Jig*_*992 3 c# linq

我正在开发一个Linq用于获取数据的项目。现在我有一个场景,我必须检查字段值是否包含我使用的Contains()函数的给定字符串。

一切正常,但是当任何领域出现时,null就会产生问题。

personData = personData.Where(x => x.FirstName.ToLower().Contains(q.ToLower()) || x.LastName.ToLower().Contains(q.ToLower())).Select(x => x).ToList();
Run Code Online (Sandbox Code Playgroud)

在这里,当 FirstName 或 LastName 字段具有空值时,它会引发错误。

那么,我该如何克服这个问题呢?

小智 6

使用以下方法: x.FirstName?.Contains(substring) ?? false

从 C# 6 开始,您可以使用空条件运算符,这大大简化了一些查询。您可以在此处阅读有关此主题的更多信息


Ahm*_*mar 5

请试试这个

personData = personData.Where(x => (x.FirstName != null && x.FirstName.ToLower().Contains(q.ToLower())) ||  (x.LastName != null && x.LastName.ToLower().Contains(q.ToLower()))).Select(x => x).ToList();
Run Code Online (Sandbox Code Playgroud)


Rah*_*awe 4

您必须首先检查所需的值是否为null,尝试使用空合并运算符...

personData = personData.Where(x => ((x.FirstName.ToLower() ?? "").Contains(q.ToLower())) ||  ((x.LastName.ToLower() ?? "").Contains(q.ToLower()))).Select(x => x).ToList();
Run Code Online (Sandbox Code Playgroud)