I've got a scenario where I need to build a SQL query, using LINQ, that includes a variable amount of OR clauses. I'm writing a function that will build the query based on some input. The function definition looks something similar to ...
function BuildQuery(ICollection<ColumnsThatNeedToBeTrue> columns)
{
...
}
So, I'm given a collection of columns that I need to check for true, and the check needs to use OR clauses.
If the columns array contains A and B, I'd need the query to check if column A is true OR column B is true.
If the columns array contains A, B and C, I'd need to query and check if A OR B OR C are true.
I don't know how to do this all within a single Where, because I don't know of a way to progressively tack on additional || clauses. I'm not sure how I'd include additional OR checks in the below, based on the input array.
var query = entities.Where(m => m.A == true || m.B == true ...)
I cannot chain Where functions, each for their own column check, because it builds that query using AND clauses and I need OR.
Is there a way to build out a query like this, using LINQ?
You can use the PredicateBuilder to chain or conditions.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With