我的 API 中有一个端点,可返回特定司机在当前周内执行的订单数量以及他们获得的总收入。我写的代码工作得很好。然而,事实证明,大量订单的速度很慢。我如何改进代码以减少耗时。
public async Task<IActionResult> GetWeeklyDriverReport(int id)
{
int mon = 0, tues = 0, wedn = 0, thurs = 0, fri = 0, sat = 0, sun = 0;
int _mon = 0, _tues = 0, _wedn = 0, _thurs = 0, _fri = 0, _sat = 0, _sun = 0;
DateTime givenDate = DateTime.Today;
DateTime startOfWeek = givenDate.AddDays(-1 * (Convert.ToInt32(givenDate.DayOfWeek) - 1));
DateTime endOfWeek = startOfWeek.AddDays(7);
var report = new List<DailyReport>();
var driver = await _userManager.FindByIdAsync(id.ToString());
if(driver == null)
return NotFound();
var orders = await _unitOfWork.Orders.GetAll(v => v.DriverId == driver.Id, q => q.OrderByDescending(s => s.FinishedDate));
orders = orders.Where(ob => startOfWeek <= ob.FinishedDate && ob.FinishedDate < endOfWeek).ToList();
if (orders.Count != 0)
{
foreach (var order in orders)
{
var day = Enum.GetName(typeof(DayOfWeek), Convert.ToInt32(order.FinishedDate.DayOfWeek));
if (day == "Monday")
{
mon += 1;
_mon += Convert.ToInt32(order.PaymentAmount);
}
//I repeat this process for each day of the week
}
var monday = new DailyReport { Day = "Monday", Deliveries = mon, Earnings = _mon };
var tuesday = new DailyReport { Day = "Tuesday", Deliveries = tues, Earnings = _tues };
var wednesday = new DailyReport { Day = "Wednesday", Deliveries = wedn, Earnings = _wedn
report.Add(monday);
report.Add(tuesday);
report.Add(wednesday);
//I repeat this process for each day of the week
return Ok(report);
}
else
{
return NoContent();
}
}