Assuming the Date
is a nullable DateTime
:
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; }));
The error I got was:
Error 30 A lambda expression with a statement body cannot be converted to an expression tree.
Of course I'm fully aware that I can simplify the query such as:
Mapper.CreateMap<SomeViewModels, SomeDTO>() .ForMember(dest => dest.Date, opt => opt.MapFrom(src => src.HasDate == "N" ? null : DateTime.Parse(src.Date.ToString())));
But what if I insist to retain the structure of the first example, because I have more complicated if else statements, that the second example will not able to cater for, or at least will not be very readable?
If you have to do complex mapping behavior, it might be better to avoid using AutoMapper for that scenario. Reverse mapping can get very complicated very quickly, and unless it's very simple, you can have business logic showing up in mapping configuration.
AutoMapper in C# is a library used to map data from one object to another. It acts as a mapper between two objects and transforms one object type into another. It converts the input object of one type to the output object of another type until the latter type follows or maintains the conventions of AutoMapper.
So, the AutoMapper Ignore() method is used when you want to completely ignore the property in the mapping. The ignored property could be in either the source or the destination object.
In recent versions of AutoMapper, ResolveUsing
was removed. Instead, use a new overload of MapFrom:
void MapFrom<TResult>(Func<TSource, TDestination, TResult> mappingFunction);
Just adding another lambda/function parameter will dispatch to this new overload:
CreateMap<TSource, TDest>() .ForMember(dest => dest.SomeDestProp, opt => opt.MapFrom((src, dest) => { TSomeDestProp destinationValue; // mapping logic goes here return destinationValue; }));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With