zoukankan      html  css  js  c++  java
  • 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();  //加入表达式
    

      

  • 相关阅读:
    属性,类方法,静态方法,Python2和3方法
    类的继承
    面向对象空间和组合
    面向对象
    内置函数和匿名函数
    一个有点意思的习题
    APUE学习笔记——10.18 system函数 与waitpid
    Linux服务器静态路由配置
    APUE学习笔记——11 线程同步、互斥锁、自旋锁、条件变量
    APUE学习笔记——11 线程基础
  • 原文地址:https://www.cnblogs.com/wwwan/p/11097755.html
Copyright © 2011-2022 走看看