DEV Community

AlexfamDan
AlexfamDan

Posted on

how to find in order you want

public async Task> GetAllProductsAsync(
int pageNumber,
int pageSize,
string? search,
string? sortOrder,
string? sortBy,
CancellationToken cancellationToken)
{
IQueryable query =
_context.Products
.AsNoTracking();

// ============================
// Search
// ============================

if (!string.IsNullOrWhiteSpace(search))
{
    search = search.Trim();

    query = query.Where(x =>
        x.Name.Contains(search) ||
        x.Category.Contains(search));
}


// ============================
// Sorting
// ============================

query = sortBy?.ToLower() switch
{
    "name" => sortOrder?.ToLower() == "desc"
        ? query.OrderByDescending(x => x.Name)
        : query.OrderBy(x => x.Name),

    "category" => sortOrder?.ToLower() == "desc"
        ? query.OrderByDescending(x => x.Category)
        : query.OrderBy(x => x.Category),

    "price" => sortOrder?.ToLower() == "desc"
        ? query.OrderByDescending(x => x.Price)
        : query.OrderBy(x => x.Price),

    "stock" => sortOrder?.ToLower() == "desc"
        ? query.OrderByDescending(x => x.Stock)
        : query.OrderBy(x => x.Stock),

    "createddate" => sortOrder?.ToLower() == "desc"
        ? query.OrderByDescending(x => x.CreatedDate)
        : query.OrderBy(x => x.CreatedDate),

    _ => query.OrderByDescending(x => x.CreatedDate)
};


// ============================
// Pagination
// ============================

pageNumber = pageNumber < 1 ? 1 : pageNumber;

pageSize = pageSize < 1
    ? 10
    : Math.Min(pageSize, 100);

query = query
    .Skip((pageNumber - 1) * pageSize)
    .Take(pageSize);


// ============================
// Database Query Execution
// ============================

return await query.ToListAsync(cancellationToken);
Enter fullscreen mode Exit fullscreen mode

}

Top comments (0)