2015-09-18 16 views
9

Supponendo che la data è DateTime nullable:Automapper: complesso se else in ForMember

Mapper.CreateMap<SomeViewModels, SomeDTO>()    
      .ForMember(dest => dest.Date, 
         opt => opt.MapFrom(src => 
         { 
          DateTime? finalDate = null; 
          if (src.HasDate == "N") 
          { 
           // so it should be null 
          } 
          else 
          {         
           endResult = DateTime.Parse(src.Date.ToString()); 

          }        
          return finalDate; 

         })); 

L'errore ho ottenuto è stato: "Errore 30 Un'espressione lambda con un corpo dichiarazione non può essere convertito in un albero di espressione."

Certo che sono pienamente consapevole che posso semplificare la query come ad esempio:

Mapper.CreateMap<SomeViewModels, SomeDTO>() 
      .ForMember(dest => dest.Date, 
         opt => opt.MapFrom(src => src.HasDate == "N" ? null : DateTime.Parse(src.Date.ToString()))); 

Ma cosa succede se insisto a mantenere la struttura del primo esempio perché ho più complicato se else che il secondo esempio non sarà in grado di soddisfare o almeno non molto leggibile?

risposta

16

Uso ResolveUsing metodo:

Mapper.CreateMap<SomeViewModels, SomeDTO>()    
     .ForMember(dest => dest.Date, o => o.ResolveUsing(Converter)); 

private static object Converter(SomeViewModels value) 
{ 
    DateTime? finalDate = null; 
    if (value.Date.HasDate == "N") 
    { 
     // so it should be null 
    } 
    else 
    {         
     finalDate = DateTime.Parse(value.Date.ToString()); 
    }        
    return finalDate; 
} 

Ecco ulteriori informazioni: AutoMapper: MapFrom vs. ResolveUsing

+0

Così ho bisogno di definire le altre proprietà di mapping nel convertitore anche se il resto sono semplici mappatura? –

+0

@ Somma a breve - sì. ma puoi mapparlo con automapper all'interno del Converter ignorando questa proprietà e impostalo manualmente :) che tipo è la tua proprietà Date? – Backs

+0

È un DateTime nullable, dimenticato di menzionarlo nella mia domanda. Puoi aggiungere quell'esempio (mappalo con automapper all'interno del Converter) nella tua risposta? Grazie. –