protected CompositeSpecification([NotNull] ISpecification<T> left, [NotNull] ISpecification<T> right, [NotNull] Func<Expression, Expression, Expression> mergeExpression) { left = left ?? throw new ArgumentNullException(nameof(left)); right = right ?? throw new ArgumentNullException(nameof(right)); mergeExpression = mergeExpression ?? throw new ArgumentNullException(nameof(mergeExpression)); _left = left.AsComplexSpecification(); _right = right.AsComplexSpecification(); _expression = ExpressionComposer.Compose(_left.GetExpression(), _right.GetExpression(), mergeExpression); _grouping = right is CompositeSpecification<T>; }
public NotSpecification(ISpecification <T> baseSpecification) { baseSpecification = baseSpecification ?? throw new ArgumentNullException(nameof(baseSpecification)); _baseSpecification = baseSpecification.AsComplexSpecification(); if (_baseSpecification is INegatableLinqSpecification <T> negatableSpecification) { _expression = negatableSpecification.GetNegationExpression(); } else { _expression = ExpressionComposer.Compose(_baseSpecification.GetExpression(), Expression.Not); } }