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 に答える