将一个对象映射到三个对象之一

时间:2017-07-12 11:58:32

标签: c# automapper

请参阅下面的代码,我从这里获取: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

是否可以这样做?

0 个答案:

没有答案