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