假设我有一个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));

10-06 13:43
查看更多