public async Task <DishesById> GetDishById(int id) { var dishDb = await _dishRepository.GetDishById(id); var dishById = new DishesById(); dishById.Id = dishDb.Id; dishById.Name = dishDb.Name; dishById.UpdatedOn = dishDb.UpdatedOn; dishById.ParentDish = new List <ParentDish>(); dishById.Ingredients = new List <IngredientsWithAmount>(); var dishesIngredients = await _dishesIngredientsRepository.GetDishIngredientsByDishesId(dishDb.Id); foreach (var item in dishesIngredients) { var ingredientsById = await _ingredientsRepository.GetIngredientsById(item.IngredientId); foreach (var item2 in ingredientsById) { var ingridientWithAmount = new IngredientsWithAmount { IngredientId = item.IngredientId, Name = item2.Name, Amount = item.Amount }; dishById.Ingredients.Add(ingridientWithAmount); } } var dishWithParentId = await _dishRepository.GetDishByParentId(dishDb.ParentId); if (dishWithParentId != null) { foreach (var item3 in dishWithParentId) { var dishesByIngredients = await _dishesIngredientsRepository.GetDishIngredientsByDishesId(item3.Id); foreach (var item4 in dishesByIngredients) { var ingredientByParent = await _ingredientsRepository.GetIngredientsById(item4.IngredientId); foreach (var item5 in ingredientByParent) { var ingridientWithAmount = new IngredientsWithAmount(); ingridientWithAmount.IngredientId = item4.IngredientId; ingridientWithAmount.Name = item5.Name; ingridientWithAmount.Amount = item4.Amount; dishById.Ingredients.Add(ingridientWithAmount); } } } foreach (var parent in dishWithParentId) { var parentDish = new ParentDish(); parentDish.ParentId = parent.Id; parentDish.ParentDishName = parent.Name; dishById.ParentDish.Add(parentDish); } } return(dishById); }