C# 实体框架Linq中where子句内部的Null检查

C# 实体框架Linq中where子句内部的Null检查,c#,asp.net-mvc,entity-framework,linq,C#,Asp.net Mvc,Entity Framework,Linq,我有一个查询返回空引用异常。 我正在使用搜索过滤数据,我放置断点并检查问题是否在于当一列有空值时,它返回exception 控制器: if (searchValue != null || searchValue != "") { expheadlist = expheadlist.Where(e => e.Name.ToLower().Contains(searchValue) || e.Desc

我有一个查询返回
空引用异常
。 我正在使用搜索过滤数据,我放置断点并检查问题是否在于当一列有空值时,它返回
exception

控制器

if (searchValue != null || searchValue != "")
{
     expheadlist = expheadlist.Where(e => 
                    e.Name.ToLower().Contains(searchValue) || 
                    e.Description.ToLower().Contains(searchValue) 
                    ).ToList<GenExpenseHead>();
}
if(searchValue!=null | | searchValue!=“”)
{
expheadlist=expheadlist.Where(e=>
e、 Name.ToLower().Contains(searchValue)|
e、 Description.ToLower().Contains(searchValue)
).ToList();
}
我在
Description
属性中允许空值。此实体在
Description
列中有空值。因此,我认为它在这段代码中返回
NullException
。我不知道如何解决它


提前感谢。

解决此问题的一种方法是使用
?。
(空传播运算符)和
(空合并运算符):

expheadlist=expheadlist.Where(e=>
e、 Name.ToLower().Contains(searchValue)|
e、 说明?.ToLower().Contains(searchValue)?false
).ToList();

这表示如果
Description
null
,则返回
false
以防止异常,否则调用
.ToLower().Contains(searchValue)
解决此问题的一种方法是使用
?。
(null传播运算符)和
(null合并运算符):

expheadlist=expheadlist.Where(e=>
e、 Name.ToLower().Contains(searchValue)|
e、 说明?.ToLower().Contains(searchValue)?false
).ToList();
这表示如果
Description
null
,则返回
false
以防止异常,否则调用
.ToLower().Contains(searchValue)
using?。(零传播运算符)和??(空合并运算符)用于两个字段,例如

expheadlist = expheadlist.Where(e => 
                e.Name?.ToLower().Contains(searchValue) ?? false || 
                e.Description?.ToLower().Contains(searchValue) ?? false
                ).ToList<GenExpenseHead>();
expheadlist=expheadlist.Where(e=>
e、 名称?.ToLower().Contains(searchValue)??false | |
e、 说明?.ToLower().Contains(searchValue)?false
).ToList();
使用?。(零传播运算符)和??(空合并运算符)用于两个字段,例如

expheadlist = expheadlist.Where(e => 
                e.Name?.ToLower().Contains(searchValue) ?? false || 
                e.Description?.ToLower().Contains(searchValue) ?? false
                ).ToList<GenExpenseHead>();
expheadlist=expheadlist.Where(e=>
e、 名称?.ToLower().Contains(searchValue)??false | |
e、 说明?.ToLower().Contains(searchValue)?false
).ToList();

您不能在
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>();
}
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();
}

此外,还可以简单地使用您的
searchValue!=空| |搜索值!=“”
使用
string.IsNullOrWhiteSpace作为条件,正如我所使用的那样

您不能在
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>();
}
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();
}

此外,还可以简单地使用您的
searchValue!=空| |搜索值!=“”
使用
string.IsNullOrWhiteSpace作为条件,正如我所使用的那样

使用…
e.Description?.ToLower
。。。db可以处理空值,但c#不能对空引用调用方法。但是看起来,这是作为linq to objects而不是ef linq执行的,应该看看这个qury us的源代码是如何准备的。。。db可以处理空值,但c#不能对空引用调用方法。但是看起来,这是作为linq to objects而不是ef linq执行的,应该看看这个qury us的源代码是如何准备的。它对您有用吗?现在显示它的错误是什么?
仅,call、increment、DECRUMENT、WAIT和新的对象表达式可以用作语句。
尝试删除
??从
名称
说明
中选择false
,并告诉我它是否有效?告诉我们。它对您有效吗?现在显示它有什么错误?
只能将call、increment、decreate、wait和new object表达式用作语句。
尝试删除
??从
名称
说明
中选择false
,并告诉我它是否有效?让我们知道。您不能在编写时在
Where
子句中写入
?。
(空条件运算符)和
??
(空合并运算符)。它将只抛出
,调用、递增、递减、等待和新对象表达式可以用作语句。
错误。您不能在编写时在
Where
子句中写入
?。
(空条件运算符)和
??
(空合并运算符)。它将只抛出
,调用、递增、递减、等待和新对象表达式可以用作语句。
错误。