如果linq

时间:2017-01-06 11:34:16

标签: 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();

这里,当FirstName或LastName字段具有空值时,它会抛出错误。

那么,我怎样才能克服这个问题?

5 个答案:

答案 0 :(得分:4)

请试试这个

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();

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

如果所需值为null,您必须先检查,尝试使用null-coalescing operator ...

personData = personData.Where(x => ((x.FirstName.ToLower() ?? "").Contains(q.ToLower())) ||  ((x.LastName.ToLower() ?? "").Contains(q.ToLower()))).Select(x => x).ToList();

答案 3 :(得分:0)

我认为你应该阻止在开始时添加null FirstName或LastName的能力。这种行似乎没用。

答案 4 :(得分:0)

如何使用如下所示的简单字符串扩展名:

public static string AsNotNull(this string value)
{
    if (string.IsNullOrWhiteSpace(value))
        return string.Empty;

    return value;
}

然后像这样使用它:

x.FirstName.AsNotNull()