public static class LinqHelper
{
//NHibernate.Hql.Ast.HqlBooleanExpression
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>> And<T>(this Expression<Func<T, bool>> expr1,
Expression<Func<T, bool>> expr2)
{
InvocationExpression invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast<Expression>());
return Expression.Lambda<Func<T, bool>>
(Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters);
}
/// <summary>
/// 排序
/// </summary>
/// <typeparam name="TEntity"></typeparam>
/// <param name="source"></param>
/// <param name="propertyStr"></param>
/// <param name="order"></param>
/// <returns></returns>
public static IQueryable<TEntity> OrderBy<TEntity>(this IQueryable<TEntity> source, string propertyStr, string order)
where TEntity : class
{
ParameterExpression param = Expression.Parameter(typeof (TEntity));
PropertyInfo property = typeof (TEntity).GetProperty(propertyStr);
Expression propertyAccessExpression = Expression.MakeMemberAccess(param, property);
LambdaExpression le = Expression.Lambda(propertyAccessExpression, param);
Type type = typeof (TEntity);
MethodCallExpression resultExp = Expression.Call(typeof (Queryable),
order == "desc" ? "OrderByDescending" : "OrderBy",
new[] {type, property.PropertyType}, source.Expression, Expression.Quote(le));
return source.Provider.CreateQuery<TEntity>(resultExp);
}
}
调用:
var member = LinqHelper.True<Memberuser>(); //申请表达式
最后加入 where 条件语句
var query = db.Members.Where(member).ToList(); //加入表达式