private async Task <List <CustomerCount> > GetCustomerCountsByMonthAsync(int nam, int thang) { var orders = await _context.Orders .Include(o => o.Customer) .Include(o => o.DetailOrders) .ThenInclude(dd => dd.Product) .AsNoTracking() .Where(o => o.ThoiGianTao.Year == nam) .ToListAsync(); if (thang != 0) { orders = orders.Where(o => o.ThoiGianTao.Month == thang).ToList(); } var items = new List <CustomerCount>(); foreach (var order in orders) { ulong tongTien = 0; foreach (var i in order.DetailOrders) { var tamTinh = i.Gia * i.SoLuong; tongTien += tamTinh; } var item = new CustomerCount { ID = order.CustomerID, Ten = order.Customer.Ten, Tien = tongTien }; items.Add(item); } var itemsGroup = items.GroupBy(i => new { i.ID, i.Ten }).Select(i => new { ID = i.Key.ID, Ten = i.Key.Ten, Tien = i.Sum(i => i.Tien) }); var customers = new List <CustomerCount>(); foreach (var i in itemsGroup) { var customer = new CustomerCount { ID = i.ID, Ten = i.Ten, Tien = i.Tien }; customers.Add(customer); } return(customers); }
private async Task <List <CustomerCount> > GetCustomerCountsByDateAsync(DateTime dau, DateTime cuoi) { var orders = await _context.Orders .Include(o => o.Customer) .Include(o => o.DetailOrders) .ThenInclude(dd => dd.Product) .AsNoTracking() .Where(o => dau.Date <= o.ThoiGianTao.Date && o.ThoiGianTao.Date <= cuoi.Date) .ToListAsync(); var items = new List <CustomerCount>(); foreach (var order in orders) { ulong tongTien = 0; foreach (var i in order.DetailOrders) { var tamTinh = i.Gia * i.SoLuong; tongTien += tamTinh; } var item = new CustomerCount { ID = order.CustomerID, Ten = order.Customer.Ten, Tien = tongTien }; items.Add(item); } var itemsGroup = items.GroupBy(i => new { i.ID, i.Ten }).Select(i => new { ID = i.Key.ID, Ten = i.Key.Ten, Tien = i.Sum(i => i.Tien) }); var customers = new List <CustomerCount>(); foreach (var i in itemsGroup) { var customer = new CustomerCount { ID = i.ID, Ten = i.Ten, Tien = i.Tien }; customers.Add(customer); } return(customers); }