2013-08-09 7 views
1

У меня есть билет, содержащий сообщения. Кроме того, модель билета содержит сообщение ResolutionMessage, которое является сообщением, которое может быть обнулено.Linq set null для значения с automapper

Я хочу сделать что-то вроде этого:

Mapper.CreateMap<Ticket, TicketModel>() 
.ForMember(dest => dest.ResolutionMessage, opt => opt.MapFrom(src => 
      { 

       if (src.ResolutionMessageID != null) 
       { 
        src.Messages.Where(m => m.MessageID == src.ResolutionMessageID); 
       } 
       else 
        // Return null; 
       } 
       )); 

Вторая попытка:

  .ForMember(dest => dest.ResolutionMessage, opt => 
       { 
        (opt.MapFrom(src => if(src.ResolutionMessageID != null) 
         opt.MapFrom(src => src.Messages.Where(m => m.MessageID == src.ResolutionMessageID)); 
       else 
        opt => opt.Ignore(); 
       } 

       ); 

Любые идеи?

ответ

2

Я буду рассматривать ResolutionMessageID является обнуляемым типа, вы можете попробовать что-то вроде этого:

.ForMember(dest => dest.ResolutionMessage, opt => opt.MapFrom(src => src.ResolutionMessageID.HasValue ? src.Messages.Where(m => m.MessageID == src.ResolutionMessageID) : null)); 

Если это не обнуляемым типа и позволяют нуль:

.ForMember(dest => dest.ResolutionMessage, opt => opt.MapFrom(src => src.ResolutionMessageID != null ? src.Messages.Where(m => m.MessageID == src.ResolutionMessageID.Value) : null)); 

Или вы используете opt.MapFrom() или opt.Ignore(), нет возможности использовать оба варианта. Я думаю, что лучше сохранить значение null, когда условие для вашей карты не принимает правило. Если вы используете, opt.Ignore() будет игнорировать свойство при преобразовании объектов.

+0

ResolutionMessageID является допустимым. Кажется, что мне нужно, но, к сожалению, мне все же нужно сделать opt => opt.Ignore(); потому что automapper, кажется, не любит нулевые значения ... Есть ли способ сделать это с opt.ignore()? – billybob

+0

Я редактирую свой ответ, смотрю! –

Смежные вопросы