这是我正在尝试做的事情:
(Dc.DET_Cases.Where(c => c.ProductID == pl.ProductID
&& oldTOR == false ? c.OldTOR == oldTOR :
&& (productLineName.ToInt() == 0 || productLineName.ToInt() == c.ProductLineID)
&& (productCategory.ToInt() == 0 || productCategory.ToInt() == c.ProductCategoryID)
&& (issueType.ToInt() == 0 || issueType.ToInt() == c.IssueTypeID)
&& (issue.ToInt() == 0 || issue.ToInt() == c.IssueID)
)
.FirstOrDefault() != null)
这是我要做的路线。
oldTOR == false ? c.OldTOR == oldTOR :
在where
LINQ语句中。如果值为false,则比较该值。如果没有,那就忽略它。
答案 0 :(得分:5)
最简单的方法是将另一个选项设置为true
。
即:!oldTOR ? c.OldTOR == oldTOR : true
这意味着如果oldTor
为false,那么我们要比较OldTor,否则,继续评估表达式的其余部分。
顺便说一下,我会将您的大量.Where()
布尔比较的每个部分拆分为单独的.Where()
语句。这将提高您的Linq的可读性和理解力。
Dc.DET_Cases
.Where(c => c.ProductID == pl.ProductID)
.Where(c => !oldTOR ? c.OldTOR == oldTOR : true)
.Where(c => productLineName.ToInt() == 0 || productLineName.ToInt() == c.ProductLineID)
.Where(c => productCategory.ToInt() == 0 || productCategory.ToInt() == c.ProductCategoryID)
.Where(c => issueType.ToInt() == 0 || issueType.ToInt() == c.IssueTypeID)
.Where(c => issue.ToInt() == 0 || issue.ToInt() == c.IssueID)
.FirstOrDefault() != null;
这清楚表明,如果oldTor
为false
,那么您要比较,否则,传递该语句(true
)。
答案 1 :(得分:0)
我认为你可以使用LINQ Dynamic Query Library。
然后根据需要创建一个查询。
答案 2 :(得分:0)
最快的方法是通过评估路径:
oldTOR && (c.OldTor == oldTOR)
为什么这是最快的?答:如果oldTOR
为false,则整个 和 语句为false,并且无需比较语句的其余部分。