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());
        }
예제 #2
0
        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);
        }