public static IOrderedQueryConfigurator <TEntity> ThenByDescending <TEntity, TProperty>(this IOrderedQueryConfigurator <TEntity> configurator, Expression <Func <TEntity, TProperty> > keySelector)
     where TEntity : class
 {
     return(ThenBy(configurator, keySelector, null, true));
 }
 public static IOrderedQueryConfigurator <TEntity> ThenBy <TEntity, TProperty>(this IOrderedQueryConfigurator <TEntity> configurator, Expression <Func <TEntity, TProperty> > keySelector, IComparer <TProperty> comparer)
     where TEntity : class
 {
     return(ThenBy(configurator, keySelector, comparer, false));
 }
        public static IOrderedQueryConfigurator <TEntity> ThenBy <TEntity, TProperty>(this IOrderedQueryConfigurator <TEntity> configurator, Expression <Func <TEntity, TProperty> > keySelector, IComparer <TProperty> comparer, bool descending)
            where TEntity : class
        {
            if (configurator == null)
            {
                throw new ArgumentNullException(nameof(configurator));
            }
            if (keySelector == null)
            {
                throw new ArgumentNullException(nameof(keySelector));
            }

            const bool isRoot = false;

            var specification = new OrderByQuerySpecification <TEntity, TProperty>(keySelector, comparer, @descending, isRoot);

            configurator.AddSpecification(specification);

            return(configurator);
        }