Hi I am using Auto mapper to map conditional entity which doesn't work without using After map but works fine with After Map which I don't won't to use. I want to map InvoiceLineCreditHeader from Domain.PermanentPlacement but conditionally.
Following is Mapping code.
 MauritiusMapper.CreateMap<Domain.PermanentPlacement, InvoiceLineCreditHeader>()
                                .ForMember(desc => desc.ApplicantName, o => o.MapFrom(source => source.Candidate.FullName))
                                .ForMember(desc => desc.DatePlaced, o => o.MapFrom(source => source.PlacementDate))
                                .ForMember(desc => desc.ApproveDate, o => o.MapFrom(source => source.LastAuditItem.DateOfAction))
                                .ForMember(desc => desc.CheckedBy, o => o.MapFrom(source => source.StartCheckedBy))
                                .ForMember(desc => desc.Job, o => o.MapFrom(source => source.JobTitle));
        MauritiusMapper.CreateMap<InvoiceLineCreditSearchResult, InvoiceLineCreditData>()
            .ForMember(d => d.InvoiceLineCredits, o => o.MapFrom(s => s.Credits))
            .ForMember(d => d.InvoiceLineCreditHeader, o => o.MapFrom(s => s.InvoiceLine))
            .ForMember(d => d.CreditReasons, o => o.MapFrom(s => s.CreditReasons))
            .ForMember(d => d.CreditStatuses, o => o.MapFrom(s => s.CreditStatuses))
            .ForMember(d => d.InvoiceLineCreditHeader, o => o.MapFrom(s => s.InvoiceLine.TransactionLines.OfType<PermanentPlacementTransactionLine>().FirstOrDefault()?.PermanentPlacement ?? s.ReissuePermanentPlacement))
This give error
An expression tree lambda may not contain a null propagating operator.
Which is explained by Why can't I use the null propagation operator in lambda expressions?
if I use Aftermap , it works fine.
        MauritiusMapper.CreateMap<InvoiceLineCreditSearchResult, InvoiceLineCreditData>()
            .ForMember(d => d.InvoiceLineCredits, o => o.MapFrom(s => s.Credits))
            .ForMember(d => d.InvoiceLineCreditHeader, o => o.MapFrom(s => s.InvoiceLine))
            .ForMember(d => d.CreditReasons, o => o.MapFrom(s => s.CreditReasons))
            .ForMember(d => d.CreditStatuses, o => o.MapFrom(s => s.CreditStatuses))
            //.ForMember(d => d.InvoiceLineCreditHeader, o => o.MapFrom(s => s.InvoiceLine.TransactionLines.OfType<PermanentPlacementTransactionLine>().FirstOrDefault()?.PermanentPlacement ?? s.ReissuePermanentPlacement))
            .AfterMap((s, d) =>
            {
                var placement
                = s.InvoiceLine.TransactionLines.OfType<PermanentPlacementTransactionLine>().FirstOrDefault()?.PermanentPlacement ?? s.ReissuePermanentPlacement;
                //  if (placement == null) return;
                d.InvoiceLineCreditHeader.ApplicantId = placement.ApplicantId;
                d.InvoiceLineCreditHeader.ApplicantName = placement.Candidate.FullName;
                d.InvoiceLineCreditHeader.Job = placement.JobTitle;
                d.InvoiceLineCreditHeader.DatePlaced = placement.PlacementDate;
                d.InvoiceLineCreditHeader.PlacedBy = placement.PlacedBy;
                d.InvoiceLineCreditHeader.ApprovedBy = placement.ApprovedBy;
                d.InvoiceLineCreditHeader.ApproveDate = placement.LastAuditItem.DateOfAction;
                d.InvoiceLineCreditHeader.CheckedBy = placement.StartCheckedBy;
                d.InvoiceLineCreditHeader.StartDate = placement.StartDate;
            });
Is There any way in auto mapper I can achieve this without using AfterMap ? there is condition as well but it is also using linq expression.
Any ideas ?
 
     
     
    