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
子句中写入?。
(空条件运算符)和??
(空合并运算符)。它将只抛出,调用、递增、递减、等待和新对象表达式可以用作语句。
错误。