【发布时间】:2022-11-14 08:54:01
【问题描述】:
我目前正在努力使用 AutoMapper 版本 10.1.1 配置。 我有以下类型:
class Response
{
List<Assignment> Assignments { get; }
List<Product> Products { get; }
}
class Assignment
{
int AssignmentId { get; set; }
int ProductId { get; set; } // references Product.ProductId
}
class Product
{
int ProductId { get; set; }
}
class AssignmentModel
{
int AssignmentId { get; set; }
int ProductId { get; set; }
Product Product { get; set; }
}
对于响应对象的“Assignments”属性中的每个项目,我想根据产品 ID 获取一个具有相应产品的新 AssignmentModel。
当前的解决方案通过将Assignments 映射到新的AssignmentModels 并将Products 映射到现有的AssignmentModels 来工作。缺点是,我必须调用映射器两次。
cfg.CreateMap<Assignment, AssignmentModel>();
cfg.CreateMap<Product, AssignmentModel>()
.ForMember(
d => d.Product, opt => opt.MapFrom(s => s))
.EqualityComparison((s, d) => s.ProductId == d.ProductId)
.ForAllOtherMembers(opt => opt.Ignore());
var assignments = mapper.Map<ICollection<AssignmentModel>>(response.Assignments);
mapper.Map(response.Products, assignments); // not using the result because it does not return assignments without products
return assignments;
是否有可能在一个电话中做到这一点?像这样:
return mapper.Map<ICollection<AssignmentModel>>(response);
【问题讨论】:
标签: c# collections merge nested automapper