score:1
You can use ObjectQuery
class and Sql operators to build your Dynamic query, something like this
public List<EMPLOYEE> Get([FromUri] EMPLOYEE query)
{
List<EMPLOYEE> emps = new List<EMPLOYEE>();
var db = AuthHandler.Ent;
var queryable = (ObjectQuery<EMPLOYEE>)db.EMPLOYEES.AsExpandable();
string condition = "CONTAINS(@column, @search)";
foreach (var prop in query.GetType().GetProperties())
{
var value = prop.GetValue(query, null);
if (value != null)
{
queryable = queryable.Where(string.Format(condition, prop.Name, value));
}
}
emps = queryable.ToList();
return emps;
}
am i right?
score:2
I will use a predicate builder like this
public static class PredicateBuilder
{
public static Expression<Func<T, bool>> True<T>() { return f => true; }
public static Expression<Func<T, bool>> False<T>() { return f => false; }
public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters);
}
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
}
}
And use it like this :
public IQueryable<Customer> GetCustomers(CustomerOrderSearchParameters parameters)
{
context.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
var predicate = PredicateBuilder.True<Customer>();
if (!string.IsNullOrEmpty(parameters.FirstName))
{
predicate = predicate.And(x => x.FirstName.Contains(parameters.FirstName));
}
if (!string.IsNullOrEmpty(parameters.LastName))
{
predicate = predicate.And(x => x.LastName.Contains(parameters.LastName));
}
if (!string.IsNullOrEmpty(parameters.Email))
{
predicate = predicate.And(x => x.email.Contains(parameters.Email));
}
if (!string.IsNullOrEmpty(parameters.PhoneNumber))
{
predicate = predicate.And(x => x.MobilePhone.Contains(parameters.PhoneNumber) || x.HomePhone.Contains(parameters.PhoneNumber));
}
if (parameters.BrandID != null)
{
predicate = predicate.And(x => x.Logins.Where(l => l.BrandID == parameters.BrandID).Any());
}
if (parameters.ShowNoOrders == true)
{
predicate = predicate.And(x => x.Orders.Where(o => o.CustomerID != x.CustomerID).Any());
}
return context.Customers.AsExpandable().Where(predicate);
}
Also the CustomerOrderSearchParameters
is just a list of simple parameters (equivalent of what you will get from your query)
Source: stackoverflow.com
Related Query
- Creating Dynamic Search Queries with Entity Framework Web API using passed in parameters as the search fields
- Creating dynamic queries with entity framework
- dynamic Linq queries with Entity Framework
- Order by child records using dynamic field with entity framework
- How to write Linq Queries for CRUD operations using Entity Framework with Asp.Net?
- Trouble writing predicates to search a repository with Entity Framework (equivalent to using a Join in SQL)
- Join into with column and variable value compared using Linq or Entity Framework queries
- Entity Framework Search functionality with Dynamic SQL WHERE clause
- Dynamic search using Entity Framework word by word
- Entity Framework Code First Dynamic Queries
- Entity Framework dynamic linq where from generic source with dynamic where clause
- How to convert a child collection of domain objects to a collection of custom objects using Entity Framework and ASP.NET Web API (Visual Basic)?
- Dynamic query with OR conditions in Entity Framework
- Using a enum with flag in an Entity Framework query
- Deleting multiple records with Entity Framework using a single LINQ query
- Entity Framework 6 deep copy/clone of an entity with dynamic depth
- Dynamic linq query expression tree for sql IN clause using Entity framework
- Entity Framework with Oracle using odp.net not taking parameters in linq query
- Entity Framework 4: Eager Loading (Include) with filters using Self Tracking Entities
- Using async with Entity Framework select list of type IQueryable<T>
- Dynamic LINQ API with .NET Framework 4
- SELECT NEW with a potentially null field using LINQ and Entity Framework
- ASP.NET Web API - Entity Framework - 500 Internal Server Error On .Include(param => param.field)
- Using Math functions in Entity framework with mysql
- How to query many-to-many relationship with 'AND' condition using LINQ and Entity Framework
- How to get Multiple Result Set in Entity Framework using Linq with C#?
- Strange Exception thrown using Dynamic Linq Entity Framework Query
- Entity Framework Code First using context in Controller
- Using Func property selector with Entity Framework 6
- When creating dynamic linq sorting and searching order statements in Entity Framework
More Query from same tag
- Linq OrderedQueryAble Error
- Working around the LINQ to SQL 2100 max parameter constraint in Where Contains
- Generating XML by using XSD class
- Different results with/without breakpoint
- how to use substring in linq query?
- How can I optimize my search?
- Entity Framework: How to query a model from other methods before DbContext is disposed?
- Remove an Item from C# Enum List
- LINQ with Contains return zero rows if i am passing empty string
- GetAll or GetList Functions And Performance Problem
- Why do casting to (int?) work while (string?) doesnt in LINQ queries
- Inconsistency in C# spec 7.16.2.5
- Where does EF linq skip / take execute?
- Execute method within linq
- How apply a method to all list members using very short linq with lambda omitted?
- Linq Where Inside Include
- LINQ to DataSet, distinct by multiple columns
- What does it mean for a label target to receive a value?
- linq inline string operation
- Unable to XML serialization when using .NET to consume REST Axis2 WS
- Strange results using dates in linq queries using EF Core
- Conflict on EntityState.Modified because two objects of same model Class?
- Complex query with if
- Linq2SQL Filter on multi columns
- Using LINQ to XML, how can I join two sets of data based on ordinal position?
- Out Of Memory Exception when finding combinations of List of string
- Linq: Group by with OR condition
- Pass XML data as a parameter in string SQL Query c# from List
- Parsing XML problem with LINQ
- Passing the Select<> to a Method