public override Expression <Func <T, bool> > ToExpression() { var leftExpression = _left.ToExpression(); var paramExpr = Expression.Parameter(typeof(T)); var exprBody = Expression.Not(leftExpression.Body); exprBody = (UnaryExpression) new ParameterReplacer(paramExpr).Visit(exprBody); var finalExpr = Expression.Lambda <Func <T, bool> >(exprBody, paramExpr); return(finalExpr); }
public override Expression <Func <T, bool> > ToExpression() { var leftExpression = _left.ToExpression(); var rightExpression = _right.ToExpression(); var paramExpr = Expression.Parameter(typeof(T)); var exprBody = Expression.OrElse(leftExpression.Body, rightExpression.Body); var notBothSpecification = (_left.And(_right).Not()); exprBody = Expression.AndAlso(exprBody, notBothSpecification.ToExpression().Body); exprBody = (BinaryExpression) new ParameterReplacer(paramExpr).Visit(exprBody); var finalExpr = Expression.Lambda <Func <T, bool> >(exprBody, paramExpr); return(finalExpr); }