private static void AssertPageDetails(PaginatedResultSet <int> page, int pages, int pageId, int[] items) { Assert.Equal(pages, page.Pages); Assert.Equal(items.Length, page.Count); Assert.Equal(pageId, page.Page); Assert.Equal(items.Length, page.Items.Count()); Assert.Equal(page.Items, items); }
private void StandardPaginationTests(IEnumerable <IList <int> > values) { var items = values.ToArray(); var p0 = PaginatedResultSet.For(-10, 3, items); var p1 = PaginatedResultSet.For(0, 3, items); var p2 = PaginatedResultSet.For(1, 3, items); var p3 = PaginatedResultSet.For(2, 3, items); var p4 = PaginatedResultSet.For(3, 3, items); var p5 = PaginatedResultSet.For(4, 3, items); var p6 = PaginatedResultSet.For(1, 7, items); var p7 = PaginatedResultSet.For(0, 100, items); AssertPageDetails(p0, pages: 4, pageId: 0, items: new[] { 1, 2, 3 }); AssertPageDetails(p1, pages: 4, pageId: 0, items: new[] { 1, 2, 3 }); AssertPageDetails(p2, pages: 4, pageId: 1, items: new[] { 4, 5, 6 }); AssertPageDetails(p3, pages: 4, pageId: 2, items: new[] { 7, 8, 9 }); AssertPageDetails(p4, pages: 4, pageId: 3, items: new[] { 10 }); AssertPageDetails(p5, pages: 4, pageId: 3, items: new[] { 10 }); AssertPageDetails(p6, pages: 2, pageId: 1, items: new[] { 8, 9, 10 }); AssertPageDetails(p7, pages: 1, pageId: 0, items: new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }); }
public async Task <ActionResult <PaginatedResultSet <Product> > > GetProducts(int?minPrice, int?page = 1, int?perPage = 20) { //_context.Products.FromSqlRaw() if (page == null || page < 1) { page = 1; } if (perPage == null || perPage > 100) { perPage = 20; } if (minPrice == null) { minPrice = int.MinValue; } var entities = await _context.Products .Where(p => p.Price >= minPrice) .OrderBy(p => p.Id) .Skip((page.Value - 1) * perPage.Value) .Take(perPage.Value) .ToListAsync(); int count = await _context.Products.Where(p => p.Price >= minPrice).CountAsync(); var resultSet = new PaginatedResultSet <Product>(entities, page.Value, count, perPage.Value); return(resultSet); //var linq = from p in _context.Products // where p.Price >= minPrice // select p; // return await linq.ToListAsync(); }