I'm trying to build a search query using LINQ to pass it to Entity Framework utilizing the criteria passed by the user. The criteria are two dimensional.
The criteria include "FieldName" and "SearchOperator", for example:
FieldName may include "FirstName", "LastName", "DateOfBirth", ...etc
SearchOperator may include "Equals", "BeginsWith", "EndsWith", "Greater", ...etc
As you can see there are too many conditions to be handled. What is the best way to implement the code?
My current code looks like this, but I feel like there should be a better way to do it.
IQueryable<Employee> query = dbContext.Employee;
switch (FieldName)
{
case "FirstName":
switch (SearchOperator)
{
case "Equals":
query = query.Where(x => x.FirstName.Equals(SearchValue));
break;
case "BeginsWith":
query = query.Where(x => x.FirstName.StartsWith(SearchValue));
break;
}
break;
case "LastName":
switch (SearchOperator)
{
case "Equals":
query = query.Where(x => x.LastName.Equals(SearchValue));
break;
case "BeginsWith":
query = query.Where(x => x.LastName.StartsWith(SearchValue));
break;
}
}