首先 一个生成Lambda表达式的静态类
public static class PredicateExtensions
{
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>> expression1,
Expression<Func<T, bool>> expression2)
{
var invokedExpression = Expression.Invoke(expression2, expression1.Parameters
.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.Or(expression1.Body, invokedExpression),
expression1.Parameters);
}
public static Expression<Func<T, bool>> And<T>(this Expression<Func<T, bool>> expression1,
Expression<Func<T, bool>> expression2)
{
var invokedExpression = Expression.Invoke(expression2, expression1.Parameters
.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>(Expression.And(expression1.Body,
invokedExpression), expression1.Parameters);
}
}
有了这个就直接上了 下面一个调用的事例
Expression<Func<UsersProfile, bool>> WhereExpr =
PredicateExtensions.True<UsersProfile>();
if (!string.IsNullOrEmpty(model.Address))
{
WhereExpr = WhereExpr.And(x => x.Address.Contains(model.Address));
}
if (!string.IsNullOrEmpty(model.CompanyName))
{
WhereExpr = WhereExpr.And(x => x.CompanyName.Contains(model.CompanyName));
}
if (!string.IsNullOrEmpty(model.LocationX))
{
WhereExpr = WhereExpr.And(x => x.LocationX.Contains(model.LocationX));
}
if (!string.IsNullOrEmpty(model.LocationY))
{
WhereExpr = WhereExpr.And(x => x.LocationY.Contains(model.LocationY));
}
if (!string.IsNullOrEmpty(model.Manager))
{
WhereExpr = WhereExpr.And(x => x.Manager.Contains(model.Manager));
}
if (!string.IsNullOrEmpty(model.NO))
{
WhereExpr = WhereExpr.And(x => x.NO.Contains(model.NO));
}
if (model.Type1 != null)
{
WhereExpr = WhereExpr.And(x => x.Type1 == (model.Type1));
}
if (model.Type2 != null)
{
WhereExpr = WhereExpr.And(x => x.Type2 == (model.Type2));
}
if (model.UserID != null)
{
WhereExpr = WhereExpr.And(x => x.UserID == (model.UserID));
}
var users = db.UsersProfile.Where(WhereExpr)
.Skip((PageID.Value - 1) * PageCount).Take(PageCount);
最后 感谢网上的牛人写出的这个静态类!