Reputation: 108
Is it possible to somehow avoid redundant computations of src.Purchases.MaxBy(p => p.PurchaseDate)
in case below?
cfg.CreateMap<Customer, CustomerDto>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name))
.ForMember(dest => dest.LastPurchaseProduct, opt => opt.MapFrom(src => src.Purchases.MaxBy(p => p.PurchaseDate).Product))
.ForMember(dest => dest.LastPurchaseQuantity, opt => opt.MapFrom(src => src.Purchases.MaxBy(p => p.PurchaseDate).Quantity))
.ForMember(dest => dest.LastPurchaseTotalAmount, opt => opt.MapFrom(src => src.Purchases.MaxBy(p => p.PurchaseDate).TotalAmount));
Thanks in advance!
Upvotes: 0
Views: 84
Reputation: 108
I managed to remove redundancy by using IncludeMembers
.
Thanks to Lucian Bargaoanu for advice.
cfg.CreateMap<Customer, CustomerDto>()
.ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name))
.IncludeMembers(src => src.Purchases.MaxBy(p => p.PurchaseDate));
cfg.CreateMap<Purchase, CustomerDto>()
.ForMember(dest => dest.LastPurchaseProduct, opt => opt.MapFrom(src => src.Product))
.ForMember(dest => dest.LastPurchaseQuantity, opt => opt.MapFrom(src => src.Quantity))
.ForMember(dest => dest.LastPurchaseTotalAmount, opt => opt.MapFrom(src => src.TotalAmount));
Upvotes: 2
Reputation: 3516
Add to Customer
a LastPurchase
property
[NotMapped]
public Purchase LastPurchase => _lastPurchase ??= Purchases.MaxBy(p => p.PurchaseDate);
And then all you need is CreateMap<Customer, CustomerDto>();
. If you cannot modify Customer
, you can use IncludeMembers
.
Upvotes: 0