From bb3a50eb183ecdb584725dd273f832919462d022 Mon Sep 17 00:00:00 2001 From: MahanCh Date: Tue, 22 Jul 2025 11:07:16 +0330 Subject: [PATCH] add pagination Queryrable - add pagination for workshop select List --- .../InfraStructure/QueryableExtensions.cs | 22 +++++++++++++++++++ .../WorkshopAgg/IWorkshopRepository.cs | 2 +- .../Workshop/IWorkshopApplication.cs | 2 +- .../WorkshopAppliction.cs | 4 ++-- .../Repository/WorkshopRepository.cs | 9 +++----- .../Admin/Controllers/WorkshopController.cs | 6 +++-- .../Company/MonthlyOverview/Index.cshtml.cs | 4 ++-- 7 files changed, 35 insertions(+), 14 deletions(-) create mode 100644 0_Framework/InfraStructure/QueryableExtensions.cs diff --git a/0_Framework/InfraStructure/QueryableExtensions.cs b/0_Framework/InfraStructure/QueryableExtensions.cs new file mode 100644 index 00000000..8d28d29f --- /dev/null +++ b/0_Framework/InfraStructure/QueryableExtensions.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.Linq; + +namespace _0_Framework.InfraStructure; + +public static class QueryableExtensions +{ + public static IQueryable ApplyPagination(this IQueryable query, int page, int pageSize) + { + if (page <= 0) page = 1; + if (pageSize <= 0) pageSize = 10; + + return query.Skip((page - 1) * pageSize).Take(pageSize); + } + public static IEnumerable ApplyPagination(this IEnumerable source, int page, int pageSize) + { + if (page <= 0) page = 1; + if (pageSize <= 0) pageSize = 10; + + return source.Skip((page - 1) * pageSize).Take(pageSize); + } +} \ No newline at end of file diff --git a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs index e95f2128..88473dc7 100644 --- a/Company.Domain/WorkshopAgg/IWorkshopRepository.cs +++ b/Company.Domain/WorkshopAgg/IWorkshopRepository.cs @@ -69,7 +69,7 @@ public interface IWorkshopRepository : IRepository Task GetWorkshopsForEmployeeStartWorkCount(long accountId); Task> GetWorkshopsForLeftWorkTemp(long accountId); Task GetWorkshopsForLeftWorkTempCount(long accountId); - Task> GetSelectList(string search,long id); + Task> GetSelectList(string search, int pageIndex, int pageSize); #endregion diff --git a/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs b/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs index fc437ad4..eebbf47b 100644 --- a/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs +++ b/CompanyManagment.App.Contracts/Workshop/IWorkshopApplication.cs @@ -85,7 +85,7 @@ public interface IWorkshopApplication Task> GetWorkshopsForLeftWorkTemp(long accountId); Task GetWorkshopsForLeftWorkTempCount(long accountId); - Task> GetSelectList(string search, long id); + Task> GetSelectList(string search, int pageIndex, int pageSize); #endregion diff --git a/CompanyManagment.Application/WorkshopAppliction.cs b/CompanyManagment.Application/WorkshopAppliction.cs index 5562e3ee..8f24cc1c 100644 --- a/CompanyManagment.Application/WorkshopAppliction.cs +++ b/CompanyManagment.Application/WorkshopAppliction.cs @@ -920,9 +920,9 @@ public class WorkshopAppliction : IWorkshopApplication return _workshopRepository.GetWorkshopsForLeftWorkTempCount(accountId); } - public async Task> GetSelectList(string search, long id = 0) + public async Task> GetSelectList(string search, int pageIndex, int pageSize) { - return await _workshopRepository.GetSelectList(search, id); + return await _workshopRepository.GetSelectList(search, pageIndex,pageSize); } #endregion diff --git a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs index 22bf35b4..e41f282a 100644 --- a/CompanyManagment.EFCore/Repository/WorkshopRepository.cs +++ b/CompanyManagment.EFCore/Repository/WorkshopRepository.cs @@ -1155,7 +1155,7 @@ public class WorkshopRepository : RepositoryBase> GetSelectList(string search,long id) + public async Task> GetSelectList(string search, int pageIndex, int pageSize) { var query = _context.Workshops.Select(x => new WorkshopSelectListViewModel() { @@ -1167,12 +1167,9 @@ public class WorkshopRepository : RepositoryBase x.Name.Contains(search)); } - if (id > 0) - { - query = query.Where(x => x.Id == id); - } + - return await query.Take(100).ToListAsync(); + return await query.ApplyPagination(pageIndex,pageSize).ToListAsync(); } diff --git a/ServiceHost/Areas/Admin/Controllers/WorkshopController.cs b/ServiceHost/Areas/Admin/Controllers/WorkshopController.cs index 90595715..6d8048e8 100644 --- a/ServiceHost/Areas/Admin/Controllers/WorkshopController.cs +++ b/ServiceHost/Areas/Admin/Controllers/WorkshopController.cs @@ -17,11 +17,13 @@ public class WorkshopController: AdminBaseController /// لیست کارگاه برای جستجو /// /// + /// + /// /// [HttpGet("select_list")] - public async Task>> GetSelectList(string search, long id) + public async Task>> GetSelectList(string search, int pageIndex,int pageSize=20) { - var data = await _workshopApplication.GetSelectList(search,id); + var data = await _workshopApplication.GetSelectList(search,pageIndex, pageSize); return data; } diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/MonthlyOverview/Index.cshtml.cs b/ServiceHost/Areas/AdminNew/Pages/Company/MonthlyOverview/Index.cshtml.cs index 7fe5c0a0..8f43c9ea 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/MonthlyOverview/Index.cshtml.cs +++ b/ServiceHost/Areas/AdminNew/Pages/Company/MonthlyOverview/Index.cshtml.cs @@ -95,9 +95,9 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.MonthlyOverview data = res }); } - public async Task OnGetWorkshopSelectList(string search, long id) + public async Task OnGetWorkshopSelectList(string search, int pageIndex,int pageSize = 20) { - var res = await _workshopApplication.GetSelectList(search, id); + var res = await _workshopApplication.GetSelectList(search, pageIndex, pageSize); return new JsonResult(new { data = res