public IViewComponentResult Invoke(int ppDrinkId, int index) { var promotionDrink = _privatePromotionRepository.GetPrivatePromotionDrinkById(ppDrinkId); var drinkSize = _drinkRepository.GetSizeByDrinkId(promotionDrink.DrinkId); Dictionary <int, Topping> toppingDictionary = promotionDrink.PrivatePromotionDrinkToppings?.Select(t => new KeyValuePair <int, Topping>(t.ToppingId, _toppingRepository.GetToppingById(t.ToppingId))).ToDictionary(k => k.Key, k => k.Value); var promotionDrinkViewModel = new PromotionDrinkItemView { DrinkSize = promotionDrink.DrinkSizeName, DrinkSizeId = promotionDrink.DrinkSizeId, DrinkName = promotionDrink.Drink.Name, Index = index, Id = promotionDrink.Id, PromotionId = promotionDrink.PrivatePromotionId, DrinkId = promotionDrink.DrinkId, Quantity = promotionDrink.Quantity, CategoryId = promotionDrink.Drink.CategoryId, Price = drinkSize.Price, PromotionDrinkToppings = promotionDrink.PrivatePromotionDrinkToppings?.Select(t => new PromotionDrinkToppingView { Id = t.Id, PromotionDrinkId = t.PrivatePromotionDrinkId, Quantity = t.Quantity, ToppingId = t.ToppingId }).ToList() }; promotionDrinkViewModel.PromotionDrinkToppings?.ForEach(t => { t.ToppingName = toppingDictionary?[t.ToppingId]?.Name; t.ToppingPrice = toppingDictionary?[t.ToppingId]?.Price; }); promotionDrinkViewModel.FullPrice = drinkSize.Price + (promotionDrinkViewModel.PromotionDrinkToppings?.Sum(t => t.Quantity * t.ToppingPrice) ?? 0); promotionDrinkViewModel.Amount = promotionDrinkViewModel.FullPrice * promotionDrinkViewModel.Quantity; return(View(promotionDrinkViewModel)); }