2015-04-27 16 views
5

Ich habe Schwierigkeiten, ein DateTime-Objekt aus (Jahr, Monat, Tag) zu erstellen, die aus der Datenbank zurückgegeben wird. Ich bin mit AutoMapper ziemlich neu, also wäre ein Anstoßen in die richtige Richtung groß.Erstellen einer DateTime mit AutoMapper

sind das Viewmodel des Datetime-Objekt und die drei Werte enthält, die die Datetime verwendet werden sollten erstellen müssen:

public class EnquiriesListViewModel 
{ 
    // other field elided 
    public sbyte flightDay; 
    public sbyte flightMonth; 
    public bool flightYear 
    public DateTime flightDate; 
    // other field elided 
} 

ich die flightDate von den anderen drei Werten konstruieren möchte AutoMapper. Ich habe verschiedene Ansätze ausprobiert, von denen einige nicht einmal kompiliert wurden!

So:

Mapper.CreateMap<enquiryListEntry, EnquiriesListViewModel>() 
    .ForMember(dest => dest.flightDate, /* what goes in here? */); 

Wir freuen uns auf Ihre Antworten.

M

+0

auf .NET gilt hilfreich wäre es, die Definition von enquiryListEntry zu sehen. – Richard

Antwort

6
Mapper.CreateMap<enquiryListEntry, EnquiriesListViewModel>() 
    .ForMember(dest => dest.flightDate, opt.MapFrom(src => new DateTime(src.flightYear, src.flightMonth, src.flightDay))); 

Sollte es tun.

+1

Sie brauchen 'opt => opt.MapFrom (src => src ....)' – Richard

+0

@Richard, das ist richtig, habe es gerade erkannt, als ich die Antwort eingereicht habe. Hat es jetzt bearbeitet. –

+0

Das ist großartig, danke @KevinD – serlingpa

0
Mapper.CreateMap<enquiryListEntry, EnquiriesListViewModel>() 
    .ForMember(dest => dest.flightDate, opt => opt.Ignore); 

var result = Mapper.Map<enquiryListEntry, EnquiriesListViewModel>(yourBaseObject); 

result.flightDate = new DateTime(); 

Nach Mapping definieren Sie Map-Methode ausgeführt werden kann, erhalten Sie Ihr Zielobjekt, dann können Sie einen beliebigen Wert auf Ihre flightDate Eigenschaft übergeben.

+0

Ich denke, das Hinzufügen eines benutzerdefinierten Resolvers zum Erstellen des Werts wird die Lösung vervollständigen. – aggietech

0

Diese Lösung kommt zu spät aber es ist gut, weil es 4.6.1

Mapper.CreateMap<enquiryListEntry, EnquiriesListViewModel>() 
     .ForMember(dest => dest.flightDate, 
       opt => opt.AddTransform(src => new DateTime(src.Year, 
                  src.Month, 
                  src.Day)));