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

      

  • 相关阅读:
    软件测试-三角形问题
    软件测试经典问题——佣金问题
    Ubuntu下ssh免password登录安装
    elasticsearch的javaAPI之query
    非递归实现树的遍历
    递归输出字符串 经典中的经典
    对二维数据进行边界拓展
    【Bootstrap3.0建站笔记一】表单元素排版
    java模拟实现生产者---消费者问题
    Codeforces Round #271 (Div. 2)
  • 原文地址:https://www.cnblogs.com/wwwan/p/11097755.html
Copyright © 2011-2022 走看看