public class OrderDTO
{
public string ClientName { get; set; }
public ICollection<OrderDetailDTO> Details { get; set; }
}
public class Order
{
public string ClientName { get; set; }
public ICollection<OrderDetail> Details { get; set; }
}
public class OrderDetailDTO
{
public int Quantity { get; set; }
public string ProductName { get; set; }
}
public class OrderDetail
{
public int OrderId { get; set; }
public int Quantity { get; set; }
public string ProductName { get; set; }
}
假设有4 OrderDetailDTO
,我希望映射的OrderDetail
实例具有自动递增的整数值。我现在正在做的是对映射实例进行后处理。
var mappedOrder = Mapper.Map<OrderDTO, Order>(orderDto);
var orderId = 1;
foreach (OrderDetail detail in mappedOrder.Details)
{
detail.OrderId = orderId++;
}
如何配置映射选项,以便映射的ICollection<OrderDetail>
包含4个OrderDetail
个实例OrderId
为1,2,3,4?
答案 0 :(得分:5)
您可以将AutoMapper配置为使用AfterMap
执行此操作:
Mapper.CreateMap<OrderDTO, Order>()
.AfterMap((src, dest) =>
{
int orderId = 1;
foreach (OrderDetail detail in dest.Details)
{
detail.OrderId = orderId++;
}
});
我不认为使用AutoMapper真的有一种“更干净”的方法。
答案 1 :(得分:1)
我使用以下方法,它更简单,可以用基类或扩展方法编写。这里的示例使用泛型但可以轻松转换
protected virtual IEnumerable<T> ConvertCsvLines(IEnumerable<TV> lines)
{
var lineNumber = 0;
return lines.Select(x =>
{
var retVal = Mapper.Map<TV, T>(x);
retVal.LineNumber = lineNumber++;
return retVal;
});
}