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

      

  • 相关阅读:
    UI是一个状态机
    WPF : Binding的3个属性: Source, RelativeSource, ElementName
    业务驱动设计
    WPF : 对Collection要注意重用子控件
    WPF : UserControl的Initialized事件不会触发
    mvc3上传图片
    MVC3.0自定义视图引擎(切换皮肤)
    ASP.NET MVC 多语言解决方案
    键盘键位表
    Silverlight之IsolatedStorageSettings对象
  • 原文地址:https://www.cnblogs.com/wwwan/p/11097755.html
Copyright © 2020-2023  润新知