AutoMapper官方文档(六)【投影】

投影

投影将源换为目标,而不是将对象模型展平。 没有额外的配置,AutoMapper需要一个平坦的目标地来匹配源类型的命名结构。 如果要将源值映射到与源结构不完全匹配的目标,则必须指定自定义成员映射定义。 例如,我们可能想要转向这个源代码结构:

public class CalendarEvent
{
    public DateTime Date { get; set; }
    public string Title { get; set; }
}

进入更适合网页输入表单的东西:

public class CalendarEventForm
{
    public DateTime EventDate { get; set; }
    public int EventHour { get; set; }
    public int EventMinute { get; set; }
    public string Title { get; set; }
}

由于目标属性的名称不完全匹配源属性 (CalendarEvent.Date 需要是CalendarEventForm.EventDate),因此我们需要在我们的类型映射配置中指定自定义成员映射:

// 模型
var calendarEvent = new CalendarEvent
{
    Date = new DateTime(2008, 12, 15, 20, 30, 0),
    Title = "Company Holiday Party"
};

// 配置AutoMapper
Mapper.Initialize(cfg =>
  cfg.CreateMap<CalendarEvent, CalendarEventForm>()
    .ForMember(dest => dest.EventDate, opt => opt.MapFrom(src => src.Date.Date))
    .ForMember(dest => dest.EventHour, opt => opt.MapFrom(src => src.Date.Hour))
    .ForMember(dest => dest.EventMinute, opt => opt.MapFrom(src => src.Date.Minute)));

// 执行映射
CalendarEventForm form = Mapper.Map<CalendarEvent, CalendarEventForm>(calendarEvent);

form.EventDate.ShouldEqual(new DateTime(2008, 12, 15));
form.EventHour.ShouldEqual(20);
form.EventMinute.ShouldEqual(30);
form.Title.ShouldEqual("Company Holiday Party");

每个自定义成员配置都使用一个动作委托来配置每个成员。 在上面的例子中,我们使用MapFrom选项来执行自定义的源到目标成员映射。 MapFrom方法将lambda表达式作为参数,然后在映射期间对其进行评估。 MapFrom表达式可以是任何Func<TSource, object> lambda表达式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值