Example #1
0
        protected static AbstractSpecification <TDomainModel> CombineSpecification(AbstractSpecification <TDomainModel> left, AbstractSpecification <TDomainModel> right, Func <Expression, Expression, BinaryExpression> combiner)
        {
            var lExpr    = left.Predicate;
            var rExpr    = right.Predicate;
            var param    = Expression.Parameter(typeof(TDomainModel));
            var combined = combiner.Invoke(
                new ReplaceParameterVisitor {
                { lExpr.Parameters.Single(), param }
            }.Visit(lExpr.Body),
                new ReplaceParameterVisitor {
                { rExpr.Parameters.Single(), param }
            }.Visit(rExpr.Body)
                );

            return(new ConstructedSpecification <TDomainModel>(Expression.Lambda <Func <TDomainModel, Boolean> >(combined, param)));
        }
Example #2
0
 public static AbstractSpecification <T> Or <T>(this AbstractSpecification <T> left, AbstractSpecification <T> right) => left | right;
Example #3
0
 public static AbstractSpecification <T> And <T>(this AbstractSpecification <T> left, AbstractSpecification <T> right) => left & right;