嗨我使用自動映射器來映射條件實體,它不工作,不使用後映射,但工作正常後,我沒有贏得地圖' 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表達式。
任何想法?