/// <summary>
        /// 重写Or函数
        /// </summary>
        /// <typeparam name="T">传入的实体类型</typeparam>
        /// <param name="expression_left">表达式主体的左边</param>
        /// <param name="expression_right">表达式主体的右边</param>
        /// <returns>返回拼接的表达式</returns>
        public static Expression <Func <T, bool> > Or <T>(this Expression <Func <T, bool> > expression_left, Expression <Func <T, bool> > expression_right)
        {
            var candidateExpr     = Expression.Parameter(typeof(T), "candidate");
            var parameterReplacer = new LambdaExpressionVisitor(candidateExpr);
            var left  = parameterReplacer.Replace(expression_left.Body);
            var right = parameterReplacer.Replace(expression_right.Body);
            var body  = Expression.Or(left, right);

            return(Expression.Lambda <Func <T, bool> >(body, candidateExpr));
        }
        /// <summary>
        /// 重写And函数
        /// </summary>
        /// <typeparam name="T">传入的实体类型</typeparam>
        /// <param name="expression_left">表达式主体的左边</param>
        /// <param name="expression_right">表达式主体的右边</param>
        /// <returns>返回拼接的表达式</returns>
        public static Expression <Func <T, bool> > And <T>(this Expression <Func <T, bool> > expression_left, Expression <Func <T, bool> > expression_right)
        {
            var candidateExpr     = Expression.Parameter(typeof(T), "candidate");
            var parameterReplacer = new LambdaExpressionVisitor(candidateExpr);
            var left  = parameterReplacer.Replace(expression_left.Body);  //例如这个我就只知道拿到左边的对象
            var right = parameterReplacer.Replace(expression_right.Body); //拿到右边的对象
            var body  = Expression.And(left, right);                      //在这个里面进行合并

            return(Expression.Lambda <Func <T, bool> >(body, candidateExpr));
        }