我的Linq查询
var result = db.APPLICATIONS.Where(a => Statuses.Contains(a.STATUS_ID)).Where(a => a.TrackingNo == TrackingNo)
var result = db.APPLICATIONS
.Where(a => Statuses.Contains(a.STATUS_ID))
.Where(a => a.TrackingNo == TrackingNo)
字符串Statuses是一个int列表,TrackingNo是一个可空的int(int?)。
Statuses
TrackingNo
int?
**问题:**如果TrackingNo为null,那么我不想运行此子句或跳过此条件。
iyr7buue1#
LINQ查询可以通过多个步骤构建:
var result = db.APPLICATIONS .Where(a => Statuses.Contains(a.STATUS_ID));if (TrackingNo != null){ result = result.Where(a => a.TrackingNo == TrackingNo);}
.Where(a => Statuses.Contains(a.STATUS_ID));
if (TrackingNo != null)
{
result = result.Where(a => a.TrackingNo == TrackingNo);
}
字符串注意,如果你有一个Select(一个投影),你可能必须在多个变量中的多个步骤中构建查询:
Select
var result2 = result.Select(a => new { a.STATUS_ID });
型而result2是在if之后“构建”的。
result2
if
vc9ivgsu2#
你可以使用它的“HasValue”属性来检查一个可空的int。
var result = db.APPLICATIONS .Where(a => Statuses.Contains(a.STATUS_ID)) .Where(a => a.HasValue && (a.TrackingNo == TrackingNo))
.Where(a => a.HasValue && (a.TrackingNo == TrackingNo))
字符串这将导致它在检查值本身之前评估“HasValue”。如果HasValue返回false,那么它将永远不会评估表达式的其余部分(因此不会导致NullReferenceException)。如果它是“int?"类型,那么这将起作用。
hwamh0ep3#
只需添加&&条件并检查null。您可以在这里使用1 where条件,为什么第二个where。请尝试以下操作:
&&
null
where
var result = db.APPLICATIONS .Where(a => Statuses.Contains(a.STATUS_ID) && a.TrackingNo!=null && a.TrackingNo == TrackingNo)
.Where(a => Statuses.Contains(a.STATUS_ID)
&& a.TrackingNo!=null
&& a.TrackingNo == TrackingNo)
字符串
cgvd09ve4#
在尝试向store表达式添加更多内容之前,您应该首先检查筛选参数的值。如果可空的TrackingNo具有值,则仅应用Statuses和TrackingNo筛选。否则,它将返回所有APPLICATIONS作为IQueryable。
var result = db.APPLICATIONS.AsQueryable();if (TrackingNo.HasValue){ result = result.Where(a => Statuses.Contains(a.STATUS_ID) && a.TrackingNo == TrackingNo);}return result;
var result = db.APPLICATIONS.AsQueryable();
if (TrackingNo.HasValue)
result = result.Where(a => Statuses.Contains(a.STATUS_ID) && a.TrackingNo == TrackingNo);
return result;
字符串或者,这将检查您是否有任何状态应用和跟踪分开。
var result = db.APPLICATIONS.AsQueryable();if (Statuses != null && Statuses.Count() > 0){ result = result.Where(a => Statuses.Contains(a.STATUS_ID)); }if (TrackingNo.HasValue){ result = result.Where(a => a.TrackingNo == TrackingNo);}return result;
if (Statuses != null && Statuses.Count() > 0)
result = result.Where(a => Statuses.Contains(a.STATUS_ID));
型或者第三种选择,因为不清楚你真正想要的是什么。这将始终应用状态过滤,只有在状态可用时才进行跟踪
var result = db.APPLICATIONS.Where(a => Statuses.Contains(a.STATUS_ID)); if (TrackingNo.HasValue){ result = result.Where(a => a.TrackingNo == TrackingNo);}return result;
var result = db.APPLICATIONS.Where(a => Statuses.Contains(a.STATUS_ID));
型
svgewumm5#
我认为你可以让它返回所有值,如果值为null,就像这样:
.Where(q => id != null ? q.Id == id : true)
5条答案
按热度按时间iyr7buue1#
LINQ查询可以通过多个步骤构建:
字符串
注意,如果你有一个
Select
(一个投影),你可能必须在多个变量中的多个步骤中构建查询:型
而
result2
是在if
之后“构建”的。vc9ivgsu2#
你可以使用它的“HasValue”属性来检查一个可空的int。
字符串
这将导致它在检查值本身之前评估“HasValue”。如果HasValue返回false,那么它将永远不会评估表达式的其余部分(因此不会导致NullReferenceException)。如果它是“int?"类型,那么这将起作用。
hwamh0ep3#
只需添加
&&
条件并检查null
。您可以在这里使用1where
条件,为什么第二个where
。请尝试以下操作:字符串
cgvd09ve4#
在尝试向store表达式添加更多内容之前,您应该首先检查筛选参数的值。如果可空的TrackingNo具有值,则仅应用Statuses和TrackingNo筛选。否则,它将返回所有APPLICATIONS作为IQueryable。
字符串
或者,这将检查您是否有任何状态应用和跟踪分开。
型
或者第三种选择,因为不清楚你真正想要的是什么。这将始终应用状态过滤,只有在状态可用时才进行跟踪
型
svgewumm5#
我认为你可以让它返回所有值,如果值为null,就像这样:
字符串