private static JsonapiPagination ExtractPagination(IEnumerable <KeyValuePair <string, string> > parameters)
        {
            var hasPageNumberParam = parameters.Any(e => e.Key == PageNumberQueryParam);
            var hasPageSizeParam   = parameters.Any(e => e.Key == PageSizeQueryParam);
            var pageNumber         = 0;
            var pageSize           = DefaultPageSize;

            if (!hasPageNumberParam && !hasPageSizeParam)
            {
                return(null);
            }

            if (hasPageNumberParam && !int.TryParse(parameters.FirstOrDefault(e => e.Key == PageNumberQueryParam).Value, out pageNumber))
            {
                throw new InvalidCastException("Page number must be a positive integer.");
            }

            if (hasPageSizeParam && !int.TryParse(parameters.FirstOrDefault(e => e.Key == PageSizeQueryParam).Value, out pageSize))
            {
                throw new InvalidCastException("Page size must be a positive integer.");
            }

            if (pageNumber < 0)
            {
                throw new NotSupportedException("Page number must not be negative.");
            }

            if (pageSize <= 0)
            {
                throw new NotSupportedException("Page size must be greater than or equal to 1.");
            }


            JsonapiPagination pagination = new JsonapiPagination();

            pagination.PageNumber = pageNumber;
            pagination.PageSize   = pageSize;

            return(pagination);
        }
        public static IQueryable <T> GeneratePagination <T>(this IQueryable <T> query, JsonapiPagination pagination)
        {
            if (pagination != null)
            {
                if (pagination.PageSize > 100)
                {
                    throw new InvalidCastException("Page size must be less than 100");
                }

                query = query.Skip((pagination.PageNumber - 1) * pagination.PageSize).Take(pagination.PageSize);
            }
            return(query);
        }