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

      

  • 相关阅读:
    svn的差异查看器和合并工具换成BCompare.exe
    Java经典编程题50道之十四
    Java经典编程题50道之十三
    Java经典编程题50道之十二
    Java经典编程题50道之十一
    Java经典编程题50道之十
    Java经典编程题50道之九
    Java经典编程题50道之八
    Java经典编程题50道之七
    Java经典编程题50道之六
  • 原文地址:https://www.cnblogs.com/wwwan/p/11097755.html
Copyright © 2011-2022 走看看