删除Linq查询中的WHERE子句

Gre*_*g B 2 c# linq linq-to-sql

我有一个包含许多位列的产品信息表.可以从具有每列复选框的界面查询此表.复选框分为几个相关组.

例如,其中三列描述了产品适用于各种市场,包括汽车,航空和海运.

如果没有选中这些复选框,我希望执行以下SQL.

SELECT * FROM Products
Run Code Online (Sandbox Code Playgroud)

如果检查了Automotive,则应执行以下SQL

SELECT * FROM Products WHERE Automotive = 1
Run Code Online (Sandbox Code Playgroud)

如果检查了多个,我希望选项一起进行OR运算

SELECT * FROM Products WHERE 
    Automotive = 1 
    OR 
    Aviation = 1
Run Code Online (Sandbox Code Playgroud)

在古老的C#和SQL中,我可以通过有条件地将SQL结合在一起来实现这个逻辑,但是我在使用Linq生成相同的逻辑时遇到了麻烦.

我的问题是如何有条件地将WHERE子句及其元素添加到我的查询中.

我更喜欢只有一个点执行查询,所以,如果可能的话,我想避免使用C#,如果要分支到不同的查询.

tva*_*son 6

我会为此使用PredicateBuilder.

var query = db.GetTable<Products>().AsQueryable();

var predicate = PredicateBuilder.False<Products>();
if (automotive.Checked)
{
    predicate = predicate.Or( p => p.Automotive == 1 );
}
if (aviation.Checked) 
{
    predicate = predicate.Or( p => p.Aviation == 1 );
}
query = query.Where( predicate );
Run Code Online (Sandbox Code Playgroud)