private ControlWeekViewModel PrepareViewModel(
            List <CourseScheduleDatabaseModel> controlWeekList,
            ControlWeekRequestModel requestModel)
        {
            // маппим список предметов из бд в модель представления
            var controlCourseViewModel = _mapper.Map <List <ControlCourseViewModel> >(controlWeekList);

            // удаляем пустые предметы и сортируем по позиции в раписании
            var sortedControlCourseViewModel = controlCourseViewModel
                                               .Where(w => !string.IsNullOrEmpty(w.CourseName) &&
                                                      w.CourseName != "Военная кафедра" &&
                                                      string.Equals(w.StudyGroupModel?.Name, requestModel.GroupName)
                                                      )
                                               .Select(s =>
            {
                s.NameOfDayWeek = StringConverterHelper.UppercaseFirst(s.NameOfDayWeek);
                return(s);
            })
                                               .OrderBy(o => StringConverterHelper.ToDayOfWeek(o.NameOfDayWeek))
                                               .ToList();

            // создаем результирующую модель представления
            var resultControlWeekViewModel = new ControlWeekViewModel
            {
                ControlCourseViewModel = sortedControlCourseViewModel,
                DatetimeRequest        = DateTimeOffset.UtcNow.Date.ToShortDateString(),
                UpdateDatetime         = _fileService.GetLastWriteTime(_fileName).Result.Date.ToShortDateString()
            };

            _logger.LogInformation("PrepareViewModel: "
                                   + "CoursesViewModel: " + "DatetimeRequest: " +
                                   resultControlWeekViewModel.DatetimeRequest + " " +
                                   "CoursesViewModel.Count: " + resultControlWeekViewModel.ControlCourseViewModel.Count
                                   );

            return(resultControlWeekViewModel);
        }
        public static T FromDynamic <T>(this IDictionary <string, object> dictionary)
        {
            var bindings = new List <MemberBinding>();
            var stringConverterHelper = new StringConverterHelper();

            foreach (var sourceProperty in typeof(T).GetProperties().Where(x => x.CanWrite))
            {
                var key = dictionary.Keys.SingleOrDefault(x => x.Equals(sourceProperty.Name, StringComparison.OrdinalIgnoreCase));
                if (string.IsNullOrEmpty(key))
                {
                    continue;
                }
                dynamic propertyValue = dictionary[key];

                MethodInfo method = stringConverterHelper.GetType().GetMethod("GetTfromString");
                method = method.MakeGenericMethod(sourceProperty.PropertyType);
                var value = method.Invoke(stringConverterHelper, new object[] { propertyValue.RawValue });

                bindings.Add(Expression.Bind(sourceProperty, Expression.Constant(value)));
            }
            Expression memberInit = Expression.MemberInit(Expression.New(typeof(T)), bindings);

            return(Expression.Lambda <Func <T> >(memberInit).Compile().Invoke());
        }