使用linq语句查询时,对象属性突然变为空

xam8gpfp  于 2022-12-15  发布在  其他
关注(0)|答案(2)|浏览(115)

我有以下的linq查询:

private List<Port> DoCountriesSearch(string search)
{
    return Countries.Where(x => x.CountrySearch.ToLower().Contains(search.ToLower())).ToList();
}

我有一个名为Countries的对象,它是一个包含各种属性的Port对象列表,每个Port对象都包含一个名为CountrySearch的属性,您可以在这里看到:

但是,当我尝试在Countries上运行linq查询时,CountrySearch属性突然变为null,从而引发null引用异常:

我以前从来没有和linq有过这样的问题。我错过了什么?

qco9c6ql

qco9c6ql1#

您的列表有很多条目。在某些条目中,CountrySearch不是null,在其他条目中,它是null。这里LINQ没有发生什么神奇的事情。
可以使用空条件运算符修复此问题

private List<Port> DoCountriesSearch(string search)
{
    return Countries.Where(
        x => x.CountrySearch?.Contains(
            search,
            StringComparions.CurrentCultureIgnoreCase) == true
    ).ToList();
}

注意,这里需要== true,因为我们必须科普null值。
另见:

up9lanfz

up9lanfz2#

这个问题完全是我的错。我有一个隐藏的方法,它将Port对象附加到列表的底部,而这些对象不是来自数据库的,因此这些项的CountrySearch字段确实为空。

相关问题