我的情况相当复杂。 我有一个订单:
public partial class Order
{
public string orderNum { get; set;}
public ICollection<Shipment> Shipments { get; set; }
...
}
我有一个观点BIGVIEW:
public partial class BIGVIEWVM
{
public string orderNum { get; set;}
public OrderDetailsVM Order { get; set; }
public ShipmentsTableVM Shipments { get; set; }
}
子视图ShipmentsTableVM
是这样的:
public partial class ShipmentsTableVM
{
public string somethingelse {get;set;}
public IEnumerable<Shipment_Table_Row_VM> Shipments{get;set;}
}
它实际上比这更复杂,但这是最简单的问题。
我有Order
,有很多Shipments
。我想使用AutoMapper从ProjectTo
到Order
进行BIGVIEW
来电。整个Order
被映射到OrderDetailsVM
没有问题,但是,我不知道怎么做是将ICollection传递给我的ShipmentsTableVM,然后将其映射到IEnumerable。
cfg.CreateMap<Order, BIGVIEW>()
.ForMember(d => d.order, opt => opt.MapFrom(s => s))
...?
我认为我可以处理从ICollection<Shipments>
到ShipmentsTableVM
的映射:
cfg.CreateMap<IEnumerable<Shipment>, ShipmentsTableVM>()
.ForMember(d => d.Shipments, opt => opt.MapFrom(s => s))
;
但是这不起作用 - 我得到一个关于Linq无法映射不是IEnumerable的东西的错误......但我使用的是IEnumerable,所以我不明白。我也尝试过各种其他配置,但我无法快速完成。
我正在为此寻找一个Automapper解决方案,因为我不想在我的控制器中手动执行投影。
由于
答案 0 :(得分:1)
实现这一目标的方法很少,其中之一就是其中之一。
cfg.CreateMap<Shipments, Shipment_Table_Row_VM>();
cfg.CreateMap<ICollection<Shipments>, ShipmentsTableVM>()
.ConstructUsing(obj => new ShipmentsTableVM())
.ForMember(d => d.Shipments, opt => opt.MapFrom(s => s));
cfg.CreateMap<Order, BIGVIEWVM>();
答案 1 :(得分:0)
您需要将适当的模型传递给子视图。试试:
Order.Shipments
或
Model.Shipments