我知道 AutoMapper 只是在 2 个对象之间映射属性。
Automapper 不适用于重塑数据,我认为这必须编程。
我有一个PeriodDTO.IEnumerable<Period>
需要重新塑造成PeriodListViewModel.List<CellViewModel>
.
每人CellViewModel
持有一个List<RowViewModel>
这不是一对一的映射,我想也许这不应该被映射 - 因为它不可能 -
public class PeriodRequest
{
public IEnumerable<Period> Periods { get; set; }
public IEnumerable<DateTime> Weeks { get; set; }
}
public class PeriodListViewModel
{
public PeriodListViewModel(IEnumerable<Period> periods)
{
CellViewModels = new List<CellViewModel>();
var groupedPeriods = periods.GroupBy(p => p.LessonNumber).OrderBy(p => p.Key).ToList();
foreach (var groupedPeriod in groupedPeriods)
{
var cellViewModel = new CellViewModel();
CellViewModels.Add(cellViewModel);
foreach (var period in groupedPeriod)
{
var rowViewModel = new RowViewModel();
rowViewModel.Content = period.Content;
rowViewModel.SchoolclassCode = period.SchoolclassCode;
rowViewModel.DayName = period.LessonDate.ToShortDateString();
rowViewModel.DayIndex = (int)period.LessonDate.DayOfWeek;
rowViewModel.LessonNumber = period.LessonNumber;
cellViewModel.Rows.Add(rowViewModel);
}
}
}
public List<CellViewModel> CellViewModels { get; set; }
}
public class CellViewModel
{
public CellViewModel()
{
Rows = new List<RowViewModel>();
}
public List<RowViewModel> Rows { get; set; }
}
public class RowViewModel
{
public string DayName { get; set; }
public string SchoolclassCode { get; set; }
public string Content { get; set; }
public int DayIndex { get; set; }
public int LessonNumber { get; set; }
}
public class Period
{
public int PeriodId { get; set; }
public DateTime LessonDate { get; set; }
public int LessonNumber { get; set; }
public string SchoolclassCode { get; set; }
public string Content { get; set; }
public int SchoolyearId { get; set; }
public Schoolyear Schoolyear { get; set; }
...
}
目前 PeriodListViewModel 可以很容易地进行单元测试。我现在问自己 AutoMapper 如何才能让情况变得更好?