Efficient pagination using OFFSET-FETCH on SQL Server.
| ID | Name | Category | Price | Stock | Rating | Reviews | SKU |
|---|---|---|---|---|---|---|---|
| 18185 | Bulk Product c114197e | Clothing | $317.80 | 334 | ★ 3.8 | 57 | BULK-5bb62f20 |
| 18186 | Bulk Product 34f632f5 | Books | $441.37 | 447 | ★ 0.3 | 81 | BULK-c5974f0d |
| 18187 | Bulk Product b043764d | Books | $444.22 | 197 | ★ 5.0 | 2 | BULK-e716aba8 |
| 18188 | Bulk Product d4c2466a | Clothing | $827.24 | 295 | ★ 3.3 | 64 | BULK-50d7b867 |
| 18189 | Bulk Product 39d01f56 | Home & Garden | $416.60 | 394 | ★ 3.9 | 97 | BULK-4c708ba4 |
| 18190 | Bulk Product 181a2054 | Clothing | $40.87 | 285 | ★ 0.0 | 16 | BULK-1da2a362 |
| 18191 | Bulk Product 5157e80a | Home & Garden | $1,006.13 | 307 | ★ 0.4 | 99 | BULK-24c359ec |
| 18192 | Bulk Product 49fa911d | Clothing | $618.34 | 57 | ★ 2.8 | 79 | BULK-de514668 |
| 18193 | Bulk Product cae472b6 | Toys & Games | $239.60 | 187 | ★ 0.4 | 32 | BULK-84c27643 |
| 18194 | Bulk Product b11715bc | Books | $436.40 | 159 | ★ 4.8 | 94 | BULK-bdf503d8 |
| 18195 | Bulk Product a4140a05 | Toys & Games | $718.73 | 40 | ★ 0.1 | 80 | BULK-a4f22490 |
| 18196 | Bulk Product 513a444c | Toys & Games | $941.89 | 212 | ★ 2.9 | 59 | BULK-811dad47 |
| 18197 | Bulk Product d6a3f69c | Home & Garden | $228.07 | 63 | ★ 0.8 | 11 | BULK-e8d60e83 |
| 18198 | Bulk Product d25d5d65 | Toys & Games | $699.82 | 400 | ★ 1.1 | 99 | BULK-726d4173 |
| 18199 | Bulk Product d019530d | Sports & Outdoors | $260.51 | 395 | ★ 3.4 | 84 | BULK-4db41590 |
| 18200 | Bulk Product 7249ab3d | Sports & Outdoors | $490.87 | 171 | ★ 4.1 | 46 | BULK-e1e72c91 |
| 18201 | Bulk Product 83032c2e | Home & Garden | $172.85 | 134 | ★ 4.2 | 68 | BULK-7221a9de |
| 18202 | Bulk Product 180fdb3f | Toys & Games | $841.92 | 226 | ★ 4.9 | 75 | BULK-bbd309ee |
| 18203 | Bulk Product b2e01d1b | Books | $597.86 | 455 | ★ 0.7 | 88 | BULK-cd402a03 |
| 18204 | Bulk Product a2792299 | Clothing | $41.35 | 162 | ★ 1.7 | 24 | BULK-b211c5a1 |
| 18205 | Bulk Product bd99e52a | Electronics | $43.61 | 261 | ★ 3.7 | 91 | BULK-70d731bd |
| 18206 | Bulk Product c1c5f854 | Electronics | $542.57 | 169 | ★ 4.8 | 38 | BULK-a861d0d5 |
| 18207 | Bulk Product 639f5f2d | Sports & Outdoors | $655.90 | 332 | ★ 2.6 | 1 | BULK-41b3cbcc |
| 18208 | Bulk Product eb5d97a5 | Sports & Outdoors | $851.40 | 220 | ★ 0.1 | 99 | BULK-bc2deccc |
| 18209 | Bulk Product 87ed7ce8 | Clothing | $765.48 | 135 | ★ 2.6 | 15 | BULK-9d79bbcf |
// Efficient pagination with Skip and Take
public async Task<PaginatedResult<DemoProduct>> GetPaginatedProductsAsync(int page, int pageSize)
{
// Get total count (cached if possible)
var totalCount = await _context.DemoProducts.CountAsync(p => p.IsActive);
// Get page of results
var items = await _context.DemoProducts
.Where(p => p.IsActive)
.OrderBy(p => p.Id) // Important: Must have ORDER BY for consistent paging
.Skip((page - 1) * pageSize) // OFFSET in SQL
.Take(pageSize) // FETCH NEXT in SQL
.AsNoTracking() // No tracking needed for read-only
.ToListAsync();
return new PaginatedResult<DemoProduct>
{
Items = items,
TotalCount = totalCount,
Page = page,
PageSize = pageSize
};
}