Fix pagination to use database-side Skip/Take instead of loading all rows

- Move .ToList() after .Skip().Take() in ContactController, QuotesController, SettingsController
- Prevents loading entire tables into memory for paginated queries
This commit is contained in:
Adam Moussa 2026-04-16 16:54:18 -04:00
parent 483b765d69
commit 493cff00fb
3 changed files with 12 additions and 18 deletions

View file

@ -131,12 +131,10 @@ namespace Api.SeaHavenIndustries.Controllers
Name = (n.FirstName + " " + n.LastName).Trim(), Name = (n.FirstName + " " + n.LastName).Trim(),
email = n.Email, email = n.Email,
phone = n.PhoneNumber phone = n.PhoneNumber
}).OrderByDescending(d => d.Id).ToList().Skip((page - 1) * pageSize) }).OrderByDescending(d => d.Id).Skip((page - 1) * pageSize)
.Take(pageSize); .Take(pageSize).ToList();
// Calculate the number of pages
var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize); var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize);
// Create a view model containing the paged items and pagination metadata
var viewModel = new Pagination_DTO var viewModel = new Pagination_DTO
{ {
Data = data, Data = data,
@ -267,12 +265,10 @@ namespace Api.SeaHavenIndustries.Controllers
n.Id, n.Id,
n.Name, n.Name,
n.Title n.Title
}).OrderByDescending(d => d.Id).ToList().Skip((page - 1) * pageSize) }).OrderByDescending(d => d.Id).Skip((page - 1) * pageSize)
.Take(pageSize); .Take(pageSize).ToList();
// Calculate the number of pages
var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize); var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize);
// Create a view model containing the paged items and pagination metadata
var viewModel = new Pagination_DTO var viewModel = new Pagination_DTO
{ {
Data = data, Data = data,

View file

@ -174,8 +174,8 @@ namespace Api.SeaHavenIndustries.Controllers
s.ContactId, s.ContactId,
s.Date, s.Date,
lineitems = s.LineItems.Select(q => new { q.Descriptions, q.Lineitem, q.LineitemNumber}), lineitems = s.LineItems.Select(q => new { q.Descriptions, q.Lineitem, q.LineitemNumber}),
}).OrderByDescending(d => d.Id).ToList().Skip((page - 1) * pageSize) }).OrderByDescending(d => d.Id).Skip((page - 1) * pageSize)
.Take(pageSize); .Take(pageSize).ToList();
// Calculate the number of pages // Calculate the number of pages
var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize); var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize);

View file

@ -104,13 +104,11 @@ namespace Api.SeaHavenIndustries.Controllers
{ {
s.Id, s.Id,
s.Name s.Name
}).OrderByDescending(d => d.Id).ToList().Skip((page - 1) * pageSize) }).OrderByDescending(d => d.Id).Skip((page - 1) * pageSize)
.Take(pageSize); .Take(pageSize).ToList();
// Calculate the number of pages
var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize); var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize);
// Create a view model containing the paged items and pagination metadata
var viewModel = new Pagination_DTO var viewModel = new Pagination_DTO
{ {
Data = data, Data = data,
@ -129,8 +127,8 @@ namespace Api.SeaHavenIndustries.Controllers
try try
{ {
var totalCount = _db.workOrders.Where(w=> w.istemplate == true).Count(); var totalCount = _db.workOrders.Where(w=> w.istemplate == true).Count();
var data = _db.workOrders.Where(w => w.istemplate == true).OrderByDescending(d => d.Id).ToList().Skip((page - 1) * pageSize) var data = _db.workOrders.Where(w => w.istemplate == true).OrderByDescending(d => d.Id).Skip((page - 1) * pageSize)
.Take(pageSize); .Take(pageSize).ToList();
// Calculate the number of pages // Calculate the number of pages
var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize); var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize);
@ -159,8 +157,8 @@ namespace Api.SeaHavenIndustries.Controllers
try try
{ {
var totalCount = _db.Users.Count(); var totalCount = _db.Users.Count();
var allUsers = _db.Users.Where(w => (w.FirstName ?? "").ToLower().Contains((search ?? "").ToLower())).OrderByDescending(d => d.Id).ToList().Skip((page - 1) * pageSize) var allUsers = _db.Users.Where(w => (w.FirstName ?? "").ToLower().Contains((search ?? "").ToLower())).OrderByDescending(d => d.Id).Skip((page - 1) * pageSize)
.Take(pageSize); .Take(pageSize).ToList();
// Calculate the number of pages // Calculate the number of pages
var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize); var totalPages = (int)Math.Ceiling(totalCount / (double)pageSize);