我有一个返回null reference exception
的查询。
我正在使用搜索过滤数据,放置了断点,并检查是否存在问题:当列具有空值时,它会返回exception
。
控制器:
if (searchValue != null || searchValue != "")
{
expheadlist = expheadlist.Where(e =>
e.Name.ToLower().Contains(searchValue) ||
e.Description.ToLower().Contains(searchValue)
).ToList<GenExpenseHead>();
}
我在Description
属性中允许空值。该实体在Description
列中为空值。我认为因此它在此代码中返回NullException
。我不知道如何解决。
谢谢。
答案 0 :(得分:3)
您不能在?.
子句中编写??
(空条件运算符)和Where
(空合并运算符)。而是在查询中使用string.IsNullOrWhiteSpace
,如下所示:
if (!String.IsNullOrWhiteSpace(searchValue))
{
expheadlist = expheadlist.Where(e => (string.IsNullOrWhiteSpace(e.Name) || e.Name.ToLower().Contains(searchValue))
|| (string.IsNullOrWhiteSpace(e.Description) || e.Description.ToLower().Contains(searchValue))
).ToList<GenExpenseHead>();
}
此外,就像我以前使用的searchValue != null || searchValue != ""
一样,您的string.IsNullOrWhiteSpace
条件也很简单!
答案 1 :(得分:1)
一种解决方法是使用?.
(空传播算子)和??
(空合并算子):
expheadlist = expheadlist.Where(e =>
e.Name.ToLower().Contains(searchValue) ||
e.Description?.ToLower().Contains(searchValue) ?? false
).ToList<GenExpenseHead>();
这表示如果Description
是null
,则返回false
防止异常,否则调用.ToLower().Contains(searchValue)
答案 2 :(得分:0)
使用?。 (空传播算子)和?? (空合并运算符),例如
expheadlist = expheadlist.Where(e =>
e.Name?.ToLower().Contains(searchValue) ?? false ||
e.Description?.ToLower().Contains(searchValue) ?? false
).ToList<GenExpenseHead>();