public static string TotalSalesByCustomer(CarDealershipContext context) { var customers = context.Customers .Include(e => e.Sales) .ThenInclude(e => e.Car) .ThenInclude(e => e.CarParts) .ThenInclude(e => e.Part) .Where(x => x.Sales.Count > 0) .ToArray(); List <TotalSalesByCustomerDto> salesByCustomer = new List <TotalSalesByCustomerDto>(); foreach (var customer in customers) { var totalSalesByCustomer = new TotalSalesByCustomerDto(); totalSalesByCustomer.FullName = customer.Name; totalSalesByCustomer.BoughtCars = customer.Sales.Count; var spentMoney = 0M; foreach (var sale in customer.Sales) { var partsPrice = 0m; var saleDiscount = sale.Discount; var salePrice = 0m; foreach (var part in sale.Car.CarParts.Select(x => x.Part.Price)) { partsPrice += part; } salePrice = (1m - (decimal)saleDiscount) * partsPrice; spentMoney += salePrice; } totalSalesByCustomer.MoneySpent = Math.Round(spentMoney, 2); salesByCustomer.Add(totalSalesByCustomer); } salesByCustomer = salesByCustomer .OrderByDescending(x => x.MoneySpent) .ThenByDescending(x => x.BoughtCars).ToList(); var xmlNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty }); XmlSerializer serializer = new XmlSerializer(typeof(List <TotalSalesByCustomerDto>), new XmlRootAttribute("customers")); var sb = new StringBuilder(); serializer.Serialize(new StringWriter(sb), salesByCustomer, xmlNamespaces); return(sb.ToString()); }
public static string TotalSalesByCustomer(CarDealershipContext context) { var customers = context.Customers .Include(e => e.Sales) .ThenInclude(e => e.Car) .ThenInclude(e => e.CarParts) .ThenInclude(e => e.Part) .Where(x => x.Sales.Count > 0) .ToArray(); List <TotalSalesByCustomerDto> salesByCustomer = new List <TotalSalesByCustomerDto>(); foreach (var customer in customers) { var totalSalesByCustomer = new TotalSalesByCustomerDto(); totalSalesByCustomer.FullName = customer.Name; totalSalesByCustomer.BoughtCars = customer.Sales.Count; var spentMoney = 0M; foreach (var sale in customer.Sales) { var partsPrice = 0m; var saleDiscount = sale.Discount; var salePrice = 0m; foreach (var part in sale.Car.CarParts.Select(x => x.Part.Price)) { partsPrice += part; } salePrice = (1m - (decimal)saleDiscount) * partsPrice; spentMoney += salePrice; } totalSalesByCustomer.MoneySpent = Math.Round(spentMoney, 2); salesByCustomer.Add(totalSalesByCustomer); } salesByCustomer = salesByCustomer .OrderByDescending(x => x.MoneySpent) .ThenByDescending(x => x.BoughtCars).ToList(); //var customers = context.Customers.Where(e=>e.Sales.Count>=1) // //.Include(e => e.Sales) // //.ThenInclude(e => e.Car) // //.ThenInclude(e => e.CarParts) // //.ThenInclude(e => e.Part) // .Select(s => new // { // fullName =s.Name, // boughtCars = s.Sales.Count, // spentMoney = s.Sales.Sum(x=>x.Car.CarParts.Sum(e=>e.Part.Price)) // -(s.Sales.Sum(x=>x.Car.CarParts.Sum(e=>e.Part.Price)) // *s.Sales.Sum(k=>k.Discount)/100) // }) // .OrderByDescending(e=>e.spentMoney) // .ThenByDescending(e=>e.boughtCars) // .ToArray(); var customersJson = JsonConvert.SerializeObject(salesByCustomer, new JsonSerializerSettings { Formatting = Formatting.Indented, NullValueHandling = NullValueHandling.Ignore }); return(customersJson); }