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