假设我有一个POCO,其中存储的日期范围如下:
public class DateRange()
{
public DateTime FromDate{get;set;}
public DateTime ToDate{get;set;}
}
我希望能够在范围的开始和/或结束时节省半天。为此,我将使用数据作为jqueryui日期选择器显示起始日期和日期,以及每个日期选择器旁边的复选框以表示1/2天。我的视图模型看起来像这样:
public class DateRangeModel()
{
public DateTime FromDate {get; set;}
public DateTime ToDate{get;set;}
public bool IsFromDateHalfDay{get; set;}
public bool IsToDateHalfDay {get; set;}
}
当选中“ FromDate”的“ 1/2 day”复选框时,我需要将实体中的“ FromDate”保存为选定的日期+ 12小时;当在ViewModel中为“ ToDate”选中了“ 1 / 2day”复选框时,我需要保存ToDate在实体中为所选日期+ 12小时。
是否可以使用Automapper做到这一点?如果不能,您是否可以建议更好/不同的方法?我不想在实体中代表半天的布尔值,因为我想单独使用DateTimes进行计算。
一些示例(仍在考虑我应该如何表示1天和1/2天的范围-需要大量测试计算范围!):
A Date Range of 1/2 Day From 24th May to a full day 27th May:
2011-05-24 12:00:00.000 => 2011-05-28 00:00:00.000
A Date Range of Full Day From 24th May to a 1/2 day 27th May:
2011-05-24 00:00:00.000 => 2011-05-27 12:00:00.000
A Half Day on 24th May:
2011-05-24 12:00:00.000 => 2011-05-25 00:00:00.000
A Full Day on 24th May:
2011-05-24 12:00:00.000 > 2011-05-25 00:00:00.000
最佳答案
我们是否假设FromDate / ToDate只能是整天(12:00 AM)或半天(12:00 PM)?
要查看的域(如果需要):
CreateMap<DateRange, DateRangeModel>()
.ForMember(dest => dest.IsFromDateHalfDay, opts => opts.MapFrom(src=>src.FromDate.Hour == 12))
.ForMember(dest => dest.IsToDateHalfDay, opts => opts.MapFrom(src=>src.ToDate.Hour == 12));
查看网域
CreateMap<DateRangeModel, DateRange>()
.ForMember(dest => dest.FromDate, opts => opts.MapFrom(src=>src.FromDate.AddHours(-1 * src.IsFromDateHalfDay ? 12 : 0))
.ForMember(dest => dest.ToDate, opts => opts.MapFrom(src=>src.ToDate.AddHours(src.IsToDateHalfDay ? 12 : 0));