Entity Framework 在循环中使用 IQueryable 进行 WHERE OR 查询

Entity Framework WHERE OR Query Using IQueryable In A Loop

我正在使用 Entity Framework Core 构建一个中型查询,并且在我的代码的一部分中,我正在遍历对象列表。

在此列表中,如果满足特定条件,我想创建一个 WHERE 查询(这很好并且有效)。但是,一旦 IQueryable 被迭代,此循环就会创建一个 WHERE AND 查询。我希望这个循环创建一个 WHERE OR?这可能吗?

where 查询 (queryable = IQueryable) 的循环示例。所以在这个循环中,我试图实现许多 WHERE OR 而不是 WHERE AND。希望这是有道理的。

foreach (var rfs in newsItemQuery.MyData.Where(x => x.Selected))
{
    if (rfs.IncludeNegative == false && rfs.IncludeNeutral == false)
    {
        queryable = queryable.Where(x => x.Id == rfs.Id && x.IsNegative == false && x.IsNeutral == false);
    }
    else if (rfs.IncludeNegative == false && rfs.IncludeNeutral)
    {
        queryable = queryable.Where(x => x.Id == rfs.Id && x.IsNegative == false);
    }
    else if (rfs.IncludeNegative && rfs.IncludeNeutral == false)
    {
        queryable = queryable.Where(x => x.Id == rfs.Id && x.IsNeutral == false);
    }
    else
    {
        queryable = queryable.Where(x => x.Id == rfs.Id);   
    }
}

我是通过使用很棒的 Nuget 包 LinqKit 来做到这一点的

https://github.com/scottksmith95/LINQKit

这允许您使用谓词构建器,它有一个 .Or 选项

IQueryable<Product> SearchProducts (params string[] keywords)
{
  var predicate = PredicateBuilder.New<Product>();

  foreach (string keyword in keywords)
  {
    string temp = keyword;
    predicate = predicate.Or (p => p.Description.Contains (temp));
  }
  return dataContext.Products.Where (predicate);
}