What to
do if you want to add multiple where condition dynamically in linq. Here is
solution for that. This is working fine for Linq to Sql. You have to use LinqKit for Linq to Entity.
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);
}
}
Use this
predicate class in our code.
using (DataSQLDataContext db = new DataSQLDataContext())
{
Expression<Func<tblInfoe, bool>> predicate = PredicateBuilder.True<tblInfoe>();
//
tblInfoe = Tables from DB
predicate = predicate.And(p
=> p.Name == "Ajay");
predicate = predicate.And(p
=> p.City == 2);
var d = db.tblInfoes.Where(predicate);
}
No comments:
Post a Comment