嗨我使用自动映射器来映射条件实体,它不工作,不使用后映射,但工作正常后,我没有赢得地图' t使用。 我想从Domain.PermanentPlacement映射InvoiceLineCreditHeader,但有条件。自动映射器映射条件实体,不使用不工作后地图
以下是映射代码。
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))
这给予错误
表达式树lambda不能包含空传播算子。
这是由Why can't I use the null propagation operator in lambda expressions?
解释的。如果我用Aftermap,它工作正常。
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;
});
是否有任何方法在自动映射器我可以实现这一点,而不使用AfterMap?还有条件,但它也使用linq表达式。
任何想法?