0
我有不同類型的源對象的兩個集合。我希望將兩個集合(兩者的聯合)映射到具有來自兩個源類型的所有成員的類型的單個目標集合。如果我這樣做:AutoMapper - 地圖兩種不同類型的源集合到單一目的地集合
CreateMap<Company, CompanyResponse>()
.ForMember(x => x.Owners, m => m.MapFrom(x => x.BusinessOwners))
.ForMember(x => x.Owners, m => m.MapFrom(x => x.IndividualOwners));
它只映射最後一次映射。我嘗試了更精細的映射,但這似乎打破了automapper所做的實體框架投影集成。我正在使用ProjectTo。
這是我試過這也確實傳達我想要的結果的一個好工作。
CreateMap<Company, CompanyResponse>()
.ForMember(x => x.Owners, m => m.ResolveUsing(x => x.BusinessOwners.Select(o => new OwnerResponse
{
Type = UpdateRegistrationCommand.CompanyUpdate.OwnerType.Business,
Address = o.Address,
PercentageShareholding = o.Percentage,
BusinessName = o.Name,
BusinessNumber = o.Number
})
.Union(x.IndividualOwners.Select(o => new OwnerResponse
{
Type = UpdateRegistrationCommand.CompanyUpdate.OwnerType.Individual,
Address = o.Address,
PercentageShareholding = o.Percentage,
Title = o.Title,
FirstName = o.FirstName,
MiddleNames = o.MiddleNames,
LastName = o.LastName
}))));
有沒有人做過這樣的事情?
嗨,Erik。 ProjectUsing似乎適用於整個地圖與單個目標表達式。 我可以輕鬆定義從IndividualOwner到OwnerResponse以及BusinessOwner到OwnerResponse的地圖。我不能做的是將這兩幅地圖的結果聯合起來。我想我可能會爲每個集合在同一類型的目標上定義兩個屬性。然後是第三個只讀屬性,它返回兩者的組合。我通過json序列化器運行這些東西,這樣我就可以排除原來的兩個屬性,並留下我想要的結果。 – Sam
實際上,這種方法並不完善。我仍然不得不使用ProjectUsing來控制實體如何預測企業所有者和個體所有者及其工作。所以你的回答是一個幫助謝謝。 – Sam