/// <summary>
        /// Applies the specification to the IQueryable type. This includes the Filtering and the Ordering.
        /// </summary>
        /// <param name="query"></param>
        /// <param name="specification"></param>
        /// <returns></returns>
        public static IQueryable <TType> ApplySpecification(IQueryable <TType> query, ISpecification <TType> specification)
        {
            var processor = new SpecificationProcessor <TType>();

            return(processor.BuildQuery(query, specification));
        }