//using System; //using System.Linq.Expressions; //namespace IRaCIS.Core.Infrastructure.ExpressionExtend //{ // /// // /// 合并表达式 And Or Not扩展 // /// // public static class ExpressionExtend // { // /// // /// 合并表达式 expr1 AND expr2 // /// // /// // /// // /// // /// // public static Expression> And(this Expression> expr1, Expression> expr2) // { // if (expr1 == null) return expr2; // else if (expr2 == null) return expr1; // //return Expression.Lambda>(Expression.AndAlso(expr1.Body, expr2.Body), expr1.Parameters); // ParameterExpression newParameter = Expression.Parameter(typeof(T), "c"); // NewExpressionVisitor visitor = new NewExpressionVisitor(newParameter); // var left = visitor.Replace(expr1.Body); // var right = visitor.Replace(expr2.Body); // var body = Expression.And(left, right); // return Expression.Lambda>(body, newParameter); // } // /// // /// 合并表达式 expr1 or expr2 // /// // /// // /// // /// // /// // public static Expression> Or(this Expression> expr1, Expression> expr2) // { // if (expr1 == null) return expr2; // else if (expr2 == null) return expr1; // ParameterExpression newParameter = Expression.Parameter(typeof(T), "c"); // NewExpressionVisitor visitor = new NewExpressionVisitor(newParameter); // var left = visitor.Replace(expr1.Body); // var right = visitor.Replace(expr2.Body); // var body = Expression.Or(left, right); // return Expression.Lambda>(body, newParameter); // } // public static Expression> Not(this Expression> expr) // { // if (expr == null) return null; // var candidateExpr = expr.Parameters[0]; // var body = Expression.Not(expr.Body); // return Expression.Lambda>(body, candidateExpr); // } // } //}