使用带有datetime和bool的automapper来表示POCO中的半天
本文关键字:POCO 半天 表示 automapper datetime bool | 更新日期: 2023-09-27 17:59:13
假设我有一个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天复选框时,我需要将实体中的FromDate保存为选定的日期+12小时,当为ViewModel中的ToDate选中1/2天复选框时我需要将该实体中的ToDate保存为选定日期+12时。
是否可以使用Automapper来完成此操作?如果没有,你能提出一个更好/不同的方法吗?我不想让bools代表实体中的半天,因为我想单独使用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
Jimmy Bogard在这里谈到了做类似的事情:http://lostechies.com/jimmybogard/2009/05/06/automapper-feature-custom-type-converters/
其原理是创建一个自定义映射。在映射时,您会考虑这两个布尔值,但它们不会出现在目标类型中。
我们是假设FromDate/ToDate只能是全天(上午12:00)还是半天(下午12:00)?
要查看的域(如果需要):
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));