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

      

  • 相关阅读:
    《流畅的Python》Data Structures--第7章 colsure and decorator
    CSS Reset 2.0标准
    Layout
    一个简单的例子 vux mutation改变状态
    __WEBPACK_IMPORTED_MODULE_3_vuex__.a is not a constructor
    vuex 使用
    (转)Vue-初步了解vue-router的三要素:路由map 、路由视图、路由导航
    router-link-active 和 router-link-exact-active router-link-active
    当前目录 根目录 写法
    mode: 'history', 去掉路由地址的#
  • 原文地址:https://www.cnblogs.com/wwwan/p/11097755.html
Copyright © 2011-2022 走看看