Search code examples
c#mappingautomapper

How to ignore null values for all source members during mapping in Automapper 6?


I've been looking everywhere: stackoverflow, automapper documentation, internets and just couldn't find any info on this one, even tho this seems to be a very common problem.

My mapping:

CreateMap<StatusLevelDTO, StatusLevel>()
            .ForAllMembers(opt => opt.Condition(src => src != null));

This doesn't work because src represents source object (StatusLevelDTO), not a source property (I think).

To be more specific, If I map ObjectA to ObjectB, ObjectA.SomeValue is null and ObjectB.SomeValue is 2, I want the destination object to keep its value (2).

I've seen this question: Automapper skip null values with custom resolver and tried the first two answers but they both seem to be outdated for version 6.

Is there any way to make this happen in Automapper 6? I am using 6.0.2 to be exact.


Solution

  • Method Condition now has five overloads, one of which accepts predicate of type

    Func<TSource, TDestination, TMember, bool>
    

    this TMember parameter is the source member. So you can check source member for null:

    CreateMap<StatusLevelDTO, StatusLevel>()
         .ForAllMembers(opts => opts.Condition((src, dest, srcMember) => srcMember != null));