如何使用LINQ链接OR子句?

Rya*_*yan 4 c# linq

我有一个场景,我需要使用LINQ构建一个SQL查询,其中包含可变数量的OR子句.我正在编写一个函数,它将根据一些输入构建查询.函数定义看起来类似于......

function BuildQuery(ICollection<ColumnsThatNeedToBeTrue> columns)
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

所以,我给了一个我需要检查的列的集合,并且检查需要使用OR子句.

如果columns数组包含AB,我需要查询来检查列A是否为真或列为B真.

如果columns数组包含A,B并且C,我需要查询并检查AOR BOR C是否为真.

我不知道如何在一个单一内完成这一切Where,因为我不知道如何逐步增加其他||条款.基于输入数组,我不确定如何在下面包含额外的OR检查.

var query = entities.Where(m => m.A == true || m.B == true ...)
Run Code Online (Sandbox Code Playgroud)

我不能链接Where函数,每个函数用于自己的列检查,因为它使用AND子句构建该查询,我需要OR.

有没有办法使用LINQ构建这样的查询?

Mag*_*nus 6

您可以使用PredicateBuilder链接or条件.

var predicate = PredicateBuilder.False<SomeEntity>();

predicate = predicate.Or (p => p.A == true);
if(something)
   predicate = predicate.Or (p => p.B == true);

var query = entities.AsExpandable().Where (predicate); //AsExpandable() for EF
Run Code Online (Sandbox Code Playgroud)