• entityframework多条件查询类


    entityframework多条件查询类

    var dataaccess = new BaseAccess();
                int totalCount = 0;
                var paramS = new OrderModelField[1];
                paramS[0].IsDesc = true;
                paramS[0].PropertyName = "B_Email";
                Expression<Func<Rm_Sec_UserData, bool>> expr = PredicateExtensions.True<Rm_Sec_UserData>().And(t => t.F_Email.Equals(pUserEmail)).And(t => t.F_UserPass == pPassword);
    
                var list = dataaccess.GetListPaged(1, 2,expr, out totalCount, paramS);
    
     //
    public static class PredicateExtensions
    {
        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>> exp_left, Expression<Func<T, bool>> exp_right)
        {
            var candidateExpr = Expression.Parameter(typeof(T), "candidate");
            var parameterReplacer = new ParameterReplacer(candidateExpr);
    
            var left = parameterReplacer.Replace(exp_left.Body);
            var right = parameterReplacer.Replace(exp_right.Body);
            var body = Expression.And(left, right);
    
            return Expression.Lambda<Func<T, bool>>(body, candidateExpr);
        }
    
        public static Expression<Func<T, bool>> Or<T>(this Expression<Func<T, bool>> exp_left, Expression<Func<T, bool>> exp_right)
        {
            var candidateExpr = Expression.Parameter(typeof(T), "candidate");
            var parameterReplacer = new ParameterReplacer(candidateExpr);
    
            var left = parameterReplacer.Replace(exp_left.Body);
            var right = parameterReplacer.Replace(exp_right.Body);
            var body = Expression.Or(left, right);
    
            return Expression.Lambda<Func<T, bool>>(body, candidateExpr);
        }
    }
    /// <summary>
    /// 统一ParameterExpression
    /// </summary>
    internal class ParameterReplacer : ExpressionVisitor
    {
        public ParameterReplacer(ParameterExpression paramExpr)
        {
            this.ParameterExpression = paramExpr;
        }
    
        public ParameterExpression ParameterExpression { get; private set; }
    
        public Expression Replace(Expression expr)
        {
            return this.Visit(expr);
        }
    
        protected override Expression VisitParameter(ParameterExpression p)
        {
            return this.ParameterExpression;
        }
    }
  • 相关阅读:
    第二章函数对象
    2013/10/24初学BOOST
    [转]delete 多表删除的使用
    vs2010配置boost编程环境(照抄并简化)
    游戏服务器修改状态标志位方法
    小思 引用和指针
    第二章:UNIX标准化及实现
    const指针
    第一章:UNIX基础知识
    基础算法——位运算
  • 原文地址:https://www.cnblogs.com/renzaijianghu/p/4216835.html
Copyright © 2020-2023  润新知