var result = db.APPLICATIONS
.Where(a => Statuses.Contains(a.STATUS_ID));
if (TrackingNo != null)
{
result = result.Where(a => a.TrackingNo == TrackingNo);
}
字符串 注意,如果你有一个Select(一个投影),你可能必须在多个变量中的多个步骤中构建查询:
var result2 = result.Select(a => new { a.STATUS_ID });
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;
型 或者第三种选择,因为不清楚你真正想要的是什么。这将始终应用状态过滤,只有在状态可用时才进行跟踪
var result = db.APPLICATIONS.Where(a => Statuses.Contains(a.STATUS_ID));
if (TrackingNo.HasValue)
{
result = result.Where(a => a.TrackingNo == TrackingNo);
}
return result;
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,就像这样:
字符串