public static DishModelDto GetDishModelDto(this IRepositoryAsync <MfdDishPriceRelations> repository, Dish dish,
                                                   int?menufordayid = null)
        {
            DishModelDto dto   = null;
            double       price = 0.00;

            if (menufordayid == null)
            {
                price = dish.CurrentPrice.Price;
            }
            else
            {
                MfdDishPriceRelations first =
                    repository.Query()
                    .Include(mp => mp.DishPrice)
                    .Select()
                    .FirstOrDefault(mfdpr => mfdpr.DishId == dish.DishID && mfdpr.MenuForDayId == menufordayid);
                if (first != null)
                {
                    price = first.DishPrice.Price;
                }
            }
            dto = new DishModelDto
            {
                DishId       = dish.DishID,
                Title        = dish.Title /*?? "Блюдо не выбрано"*/,
                ProductImage = dish.ProductImage,
                Price        = price,
                Category     = dish.DishType.Category,
                Description  = dish.Description,
                Deleted      = dish.Deleted
            };
            return(dto);
        }
        public static int UpdateMfdDishes(this IRepositoryAsync <MfdDishPriceRelations> repository,
                                          MenuForDayDto menuforday)
        {
            MenuForDay menuFd =
                repository.GetRepositoryAsync <MenuForDay>()
                .Query()
                .Include(mfd => mfd.DishPriceMfdRelations.Select(dp => dp.DishPrice))
                .Include(mfd => mfd.DishPriceMfdRelations.Select(dp => dp.Dish))
                .Include(mfd => mfd.DishPriceMfdRelations.Select(dp => dp.Dish.DishType))
                .Include(mfd => mfd.DayOrderMenus.Select(dp => dp.MenuForDay))
                .Include(mfd => mfd.DayOrderMenus.Select(dp => dp.MenuForDay.WorkingDay.DayOfWeek))
                .Include(mfd => mfd.DayOrderMenus.Select(dp => dp.WeekOrderMenu.DayOrderMenus))
                .Include(mfd => mfd.WorkingDay.WorkingWeek.Year)
                .Include(mfd => mfd.DayOrderMenus.Select(dord => dord.WeekOrderMenu.MenuForWeek))
                .Select()
                .FirstOrDefault(mfd => mfd.ID == menuforday.Id);

            if (menuFd != null)
            {
                int changedishid = menuforday.Dishes.Select(d => d.DishId)
                                   .FirstOrDefault(id => !menuFd.DishPriceMfdRelations.Select(dp => dp.DishId).Contains(id));
                if (changedishid == 0)
                {
                    for (int i = 0; i < menuFd.DishPriceMfdRelations.Count; i++)
                    {
                        if (menuFd.DishPriceMfdRelations.ElementAt(i).DishPrice != repository.GetDishPrice(menuforday.Dishes.ElementAt(i).Price))
                        {
                            changedishid = menuFd.DishPriceMfdRelations.ElementAt(i).DishId;
                        }
                    }
                }

                menuFd.DishPriceMfdRelations = repository.MfdByMenuForDayDto(menuforday);
                Dish dish =
                    repository.GetRepositoryAsync <Dish>()
                    .Query()
                    .Include(d => d.DishType)
                    .Include(d => d.CurrentPrice)
                    .Select()
                    .FirstOrDefault(d => d.DishID == changedishid);
                MfdDishPriceRelations rel =
                    menuFd.DishPriceMfdRelations.FirstOrDefault(
                        mfd => dish != null && string.Equals(mfd.Dish.DishType.Category, dish.DishType.Category));

                if (rel != null && dish != null)
                {
                    rel.DishId = changedishid;
                    var firstOrDefault = menuforday.Dishes.FirstOrDefault(d => d.DishId == changedishid);
                    if (firstOrDefault != null)
                    {
                        dish.CurrentPrice = repository.GetDishPrice(firstOrDefault.Price);
                    }
                    rel.DishPrice = dish.CurrentPrice;
                    repository.Context.Entry(rel).State  = EntityState.Modified;
                    repository.Context.Entry(dish).State = EntityState.Modified;

                    menuFd.TotalPrice = menuforday.TotalPrice;

                    repository.Context.Entry(menuFd).State = EntityState.Modified;

                    return(dish.DishType.Id);
                }
            }
            return(0);
        }