/// <summary>
        /// Links specification with or condition.
        /// </summary>
        /// <param name="specification">Specification.</param>
        /// <returns>Specification <see cref="SpecificationBase{T}"/>.</returns>
        public SpecificationBase <T> Or(SpecificationBase <T> specification)
        {
            if (this == All || specification == All)
            {
                return(All);
            }

            return(new OrSpecification <T>(this, specification));
        }
        /// <summary>
        /// Links specification with and condition.
        /// </summary>
        /// <param name="specification">Specification.</param>
        /// <returns>Specification <see cref="SpecificationBase{T}"/>.</returns>
        public SpecificationBase <T> And(SpecificationBase <T> specification)
        {
            if (this == All)
            {
                return(specification);
            }

            return(specification == All
                ? this
                : new AndSpecification <T>(this, specification));
        }
 /// <summary>
 /// Filters a sequence of values based on <paramref name="specification"/>.
 /// </summary>
 /// <typeparam name="TSource">Type.</typeparam>
 /// <param name="source">Sequence.</param>
 /// <param name="specification">Specification.</param>
 /// <returns>An <see cref="IQueryable"/>.</returns>
 public static IQueryable <TSource> Where <TSource>(
     this IQueryable <TSource> source, SpecificationBase <TSource> specification)
 {
     return(source.Where(specification.ToExpression()));
 }
Example #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="OrSpecification{T}"/> class.
 /// </summary>
 /// <param name="left">Left specification.</param>
 /// <param name="right">Right specification.</param>
 public OrSpecification(SpecificationBase <T> left, SpecificationBase <T> right)
 {
     _left  = left ?? throw new ArgumentNullException(nameof(left));
     _right = right ?? throw new ArgumentNullException(nameof(right));
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="NotSpecification{T}"/> class.
 /// </summary>
 /// <param name="specification">Specification.</param>
 public NotSpecification(SpecificationBase <T> specification)
 {
     _specification = specification;
 }