Home > OS >  Entity Framework - how to build a query with a list of OR clauses
Entity Framework - how to build a query with a list of OR clauses

Time:09-21

I'm looking for a way to chain multiple OR clauses in a EF query.

Here's an example function, which, when called with an argument int[] containing exactly 2 elements, will create an OR clause with them (of course, less than 2 elements would cause an exception and more than 2 elements would be ignored):

public async Task<List<MyTable>> MyQuery(DbContext dbContext, int[] list)
{
    IQueryable<MyTable> q = dbContext.MyTable;

    q = q.Where(x => x.Id == list[0] || x.Id == list[1]);

    // here I chain several other clauses...
    q = q.Where(x => x.SomeOtherFiled == 123);

    return  await q.ToListAsync();
}

I would like to modify this code in a way that would perform OR logic with all the elements of the array (1-n; ie. any length). In this example I'm using an int data type, but in reality it could be any data type that can exist in a EF data set. Several AND conditions could be chained together (here I use SomeOtherFiled as an example). I hope I explained well the problem.

CodePudding user response:

It sounds like what you are describing is equivalent to the IN operator in SQL (ex: WHERE Id IN (1,4,6)).

The equivalent Linq is like this:

int[] list = {1,4,6};
q = q.Where(x => list.Contains(x.Id))
  • Related