0

我有一个场景,我试图将源对象中的整数值映射到DateTime属性。你自然不能那样做。但是我想要做的是将源中整数中的天数添加到DateTime目标属性的属性值中。

到目前为止,我还没有找到解释这种情况的解决方案。

有人知道该怎么做吗?

伪代码示例:

Mapper.CreateMap<EditAdView, Ad>()
         .ForMember(dest => dest.ExpirationDate, opt => opt.MapFrom(src => dest.ExpirationDate.AddDays(src.ExtendedDurationInWeeks * 7)); 

上面的例子不起作用,但它确实显示了我想要做的事情。即向目标属性对象的现有值添加天数

请记住:该dest.ExpirationDate属性已经填充了一个值,这就是我需要从源对象更新它的原因。

提前致谢。

解决方法:(详见下方答案)

       //in the mapping configuration
       Mapper.CreateMap<EditAdView, Ad>()
              .ForMember(dest => dest.ExpirationDate, opt => opt.Ignore())
              .AfterMap((src, dest) => dest.ExpirationDate = dest.ExpirationDate.AddDays(src.ExtendedDuretionInWeeks * 7));

       //in the controller
       existingAd = Mapper.Map(view, existingAd);
4

1 回答 1

1

我认为这将满足您的需求:

public class Source
{
    public int ExtendedDurationInWeeks { get; set; }
}    

public class Destination
{
    public DateTime ExpirationDate { get; set; }

    public Destination()
    {
        ExpirationDate = DateTime.Now.Date;
    }
}

var source = new Source{ ExtendedDurationInWeeks = 2 };
var destination = new Destination {ExpirationDate = DateTime.Now.Date};

Mapper.CreateMap<Source, Destination>()
      .AfterMap((s,d) => d.ExpirationDate = 
                        d.ExpirationDate.AddDays(s.ExtendedDurationInWeeks * 7));

destination = Mapper.Map(source, destination);
于 2013-10-20T22:08:21.970 回答