This is OrderStatus enum:
public enum OrderStatus
{
[Display(Name = "Gözləmədə")]
Pending,
[Display(Name = "Qəbul olundu")]
Accepted,
[Display(Name = "Ləğv edildi")]
Rejected,
[Display(Name = "Çatdırıldı")]
Delivered
}
This is Order model:
public class Order : BaseEntity
{
public string AppUserId { get; set; }
public AppUser AppUser { get; set; }
[StringLength(255), Required]
public string StoreName { get; set; }
[StringLength(255), Required]
public string StoreAddress { get; set; }
public double TotalPrice { get; set; }
public double RemainingBalance { get; set; }
public ShippingMethod ShippingMethod { get; set; }
public OrderStatus Status { get; set; }
public PaymentStatus PaymentStatus { get; set; }
public IEnumerable<OrderItem> OrderItems { get; set; }
public IEnumerable<Payment> Payments { get; set; }
}
And there is a switch statement in the OrderController to filter data:
private async Task<IEnumerable<Order>> PaginateAsync(string status, int page)
{
ViewBag.Status = status;
ViewBag.CurrentPage = page;
int perPage = 10;
ViewBag.PerPage = perPage;
IEnumerable<Order> orders = await _context.Orders
.Include(o => o.AppUser)
.Include(o => o.OrderItems)
.Where(o => !o.IsDeleted)
.OrderByDescending(o => o.Id)
.ToListAsync();
orders = status switch
{
"pending" => orders.Where(o => (int)o.Status == 0),
"accepted" => orders.Where(o => (int)o.Status == 1),
"rejected" => orders.Where(o => (int)o.Status == 2),
"delivered" => orders.Where(o => (int)o.Status == 3),
_ => orders
};
ViewBag.PageCount = Math.Ceiling((double)orders.Count() / perPage);
return orders.Skip((page - 1) * perPage).Take(perPage);
}
My question is: Why is cast to integer redundant? I need to cast the values to int to compare them in accepted, rejected, and delivered cases, but not pending case. Why is it unnecessary in pending case?
Actually, this is just question, not a problem.
