private IQueryable <Book> Filter(BookPaginationParams bookParams)
 {
     return(FindByExpression(book =>
                             (book.publishDate >= bookParams.MinDateTime) &&
                             (book.publishDate <= bookParams.MaxDateTime) &&
                             ((bookParams.minPrice == null || book.Price >= bookParams.minPrice)) &&
                             ((bookParams.maxPrice == null || book.Price <= bookParams.maxPrice)) &&
                             (bookParams.BookCategories == null || bookParams.BookCategories.Where(b => b.Equals(book.Category)).Any()) &&
                             (string.IsNullOrEmpty(bookParams.AuthorId) || book.AuthorId == bookParams.AuthorId)));
 }
 public static BookPaginationParams ConvertToBookPagination(this BookPaginationParams _params, HttpContext context)
 {
     _params.Pagenumber     = int.Parse(context.Request.Headers["PageNumber"]);
     _params.Pagesize       = int.Parse(context.Request.Headers["PageSize"]);
     _params.MinDateTime    = DateTime.Parse(context.Request.Headers["minDateTime"]);
     _params.MaxDateTime    = DateTime.Parse(context.Request.Headers["maxDateTime"]);
     _params.BookCategories = context.Request.Headers["BookCategories"].Select(item => (BookCategoryEnum)int.Parse(item)).ToList();
     _params.maxPrice       = int.Parse(context.Request.Headers["maxPrice"]);
     _params.minPrice       = int.Parse(context.Request.Headers["minPrice"]);
     return(_params);
 }
        public async Task <PagedList <Book> > GetBooksPerPage(BookPaginationParams pageParams)
        {
            var filteredSource = Filter(pageParams).Include(b => b.Imgs).Include(b => b.Author);

            return(await PagedList <Book> .ToPagedList(filteredSource, pageParams.Pagenumber, pageParams.Pagesize));
        }