如何解决 Get Endpoint ASP.Net API 中的延迟问题

时间:2021-04-13 07:06:50

标签: c# api asp.net-core

我的 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();
            }
}

0 个答案:

没有答案