LinqHelper拓展

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();  //加入表达式

  

原文地址:https://www.cnblogs.com/wwwan/p/11097755.html