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()); }