/// <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)); }