C# 删除Linq查询中的WHERE子句

C# 删除Linq查询中的WHERE子句,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,我有一个包含许多位列的产品信息表。可以从一个界面查询此表,该界面的每一列都有一个复选框。复选框分为几个相关组 例如,其中三列描述了产品在汽车、航空和船舶等不同市场的适用性 如果没有选中这些复选框,我希望执行以下SQL SELECT * FROM Products 如果选中Automotive,则应执行以下SQL SELECT * FROM Products WHERE Automotive = 1 如果选中了多个选项,我希望将选项合并在一起 SELECT * FROM Products WH

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

例如,其中三列描述了产品在汽车、航空和船舶等不同市场的适用性

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

SELECT * FROM Products
如果选中Automotive,则应执行以下SQL

SELECT * FROM Products WHERE Automotive = 1
如果选中了多个选项,我希望将选项合并在一起

SELECT * FROM Products WHERE 
    Automotive = 1 
    OR 
    Aviation = 1
在良好的旧C#&SQL中,我可以通过有条件地将SQL合并在一起来实现这种逻辑,但是我很难用Linq生成相同的逻辑

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

我更喜欢在执行查询时只有一个点,因此,如果可能的话,我希望避免使用C#if来分支到不同的查询。

将值设为“或”与“和”会使这个问题变得更加困难。如果是“And”,那么下面的内容就可以了

public IEnumerable<Products> GetQuery() {
  var query = db.GetTable<Products>();
  if ( automotiveBox.Checked ) {
    query = query.Where(x => x.Automotive == 1);
  }
  if ( aviation.Checked ) {
    query = query.Where(x => x.Aviation == 1);
  }
  return query
}
public IEnumerable GetQuery(){
var query=db.GetTable();
如果(automotiveBox.Checked){
query=query.Where(x=>x.Automotive==1);
}
如果(航空检查){
query=query.Where(x=>x.Aviation==1);
}
返回查询
}
虽然它是一个“或”,但我认为您唯一的选择是手工构建表达式树,并将其用作Where子句

如果您试图将检查单个列的“或”语句组合在一起,则可以使用来完成此操作。这里有一个演示如何工作

但是,如果您试图动态检查不同的列,这将不起作用。在这种情况下,可能需要多个语句

我会用a来做这个

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 );
var query=db.GetTable().AsQueryable();
var predicate=PredicateBuilder.False();
如果(自动检查)
{
谓词=谓词或(p=>p.Automotive==1);
}
如果(航空检查)
{
谓词=谓词或(p=>p.Aviation==1);
}
query=query.Where(谓词);

这对“或”案例不起作用吗?我相信在生成的SQL中,多个Where条件将简单地组合成一个Where子句。似乎支持这一点。是的,但它们将在生成的SQL中形成一个“AND”案例。您实际上是在执行where A和where B以及where C,而不是where(A或B或C),因为这需要不同样式的SQL语句。没错!这台PredicateBuilder很好用!!这有用吗?