请参阅下面的代码,我从这里获取:https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance(运行时多态性部分)
public class Order { }
public class OnlineOrder : Order { }
public class MailOrder : Order { }
public class OrderDto { }
public class OnlineOrderDto : OrderDto { }
public class MailOrderDto : OrderDto { }
Mapper.Initialize(cfg => {
cfg.CreateMap<Order, OrderDto>()
.Include<OnlineOrder, OnlineOrderDto>()
.Include<MailOrder, MailOrderDto>();
cfg.CreateMap<OnlineOrder, OnlineOrderDto>();
cfg.CreateMap<MailOrder, MailOrderDto>();
});
// Perform Mapping
var order = new OnlineOrder();
var mapped = Mapper.Map(order, order.GetType(), typeof(OrderDto));
Assert.IsType<OnlineOrderDto>(mapped);
它按预期工作。假设我将代码更改为:
https://github.com/AutoMapper/AutoMapper/wiki/Mapping-inheritance
public class Order {
public class OnlineOrder : Order { int type;}}
public class OrderDto { }
public class OnlineOrderDto : OrderDto { }
public class MailOrderDto : OrderDto { }
假设我想按照以下逻辑将OnlineOrder映射到其中一个DTO:
if (OnlineOrder.Type==1) { return new OnlineOrderDto() }
elseif (OnlineOrder.Type==2) { return new MailOrderDto() }
我实际上是在LINQ to Entities中尝试这样做:
list = CreditCardPreQualificationDatabase
.dbOffers
.Select(Mapper.Map<OrderDTO>)
.ToList();
此后运行; list应包含以下类型:OnlineOrderDto和MailOrderDto
是否可以这样做?