2015-04-27 2 views
5

Я изо всех сил пытаюсь создать объект DateTime из (год, месяц, день), который возвращается из базы данных. Я довольно новичок в AutoMapper, поэтому толчок в правильном направлении будет замечательным.Создание DateTime с использованием AutoMapper

Вот ViewModel, содержащий объект DateTime и три значения, которые должны быть использованы для создания DateTime:

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

Я хотел AutoMapper построить flightDate от трех других значений. Я пробовал разные подходы, некоторые из которых даже не компилировались!

Как это:

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

С нетерпением ждем ваших ответов.

M

+0

Было бы полезно, чтобы увидеть определение enquiryListEntry. – Richard

ответ

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

Должно быть сделано.

+1

Вам понадобится 'opt => opt.MapFrom (src => src ....)' – Richard

+0

@ Рихард, это правильно, просто осознал это, когда я отправил ответ. Отредактировал его сейчас. –

+0

Отлично, спасибо @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(); 

После определения отображения вы можете запустить метод Map, вы получите ваш объект назначения, то вы можете передать любое значение вашей собственности flightDate.

+0

Я думаю, что добавление пользовательского резольвера для создания значения завершит решение. – aggietech

0

Это решение приходит слишком поздно, но его хорошо, потому что это относится к .NET 4.6.1

Mapper.CreateMap<enquiryListEntry, EnquiriesListViewModel>() 
     .ForMember(dest => dest.flightDate, 
       opt => opt.AddTransform(src => new DateTime(src.Year, 
                  src.Month, 
                  src.Day))); 
Смежные вопросы