Cześć. Chciałbym pobrać dane z bazy po pewnych kryteriach sortowania. I mam taki problem. Jak moge zrobić że jeżeli kryteria są puste to po prostu pobierze wszystko. Jasne oczywiste jest że można zrobić na ifa ale czy jest inny sposoób ?
Tak to teraz wygląda i macie mozę jakieś dobre praktyki aby polepszyć ten kod ?
public async Task<PagedResult<Tenure>> GetAllActiveAsync(int? page, Query query)
{
var tenures = db.Tenures.Where(x => x.Name.ToLower().Contains(query.Name.ToLower()) || x.City.ToLower().Contains(query.City.ToLower()));
page = page - 1;
var pageSize = 10;
int startPage = 1;
int endPage = 5;
int totalItems = tenures.Where(x => x.IsActive == true && x.Company.IsActive == true && x.IsPremium == false).Count();
int totalElements = db.Tenures.Where(x => x.IsActive == true && x.Company.IsActive == true).Count();
int totalPages = (int)Math.Ceiling((decimal)totalItems / pageSize);
int currentPage = page ?? 1;
if (currentPage >= 5 && currentPage <= (totalPages - 4))
{
startPage = currentPage - 1;
endPage = currentPage + 1;
}
else if (currentPage > (totalPages - 4))
{
startPage = totalPages - 4;
endPage = totalPages;
}
if (startPage <= 0)
{
startPage = 1;
}
if (endPage >= totalPages)
{
endPage = totalPages;
}
var result = await tenures.Where(x => x.IsActive == true && x.Company.IsActive == true && x.IsPremium == false)
.Include(x => x.Company)
.OrderByDescending(x => x.CreatedAt)
.Skip((int)currentPage * pageSize)
.Take(pageSize)
.AsNoTracking()
.ToListAsync();
return new PagedResult<Tenure>
{
Results = result,
PageSize = pageSize,
TotalCount = totalPages,
StartPage = startPage,
EndPage = endPage,
CurrentPage = currentPage,
ResultCount = totalItems,
TotalElements = totalElements
};
}