当输入为 IQueryable 时,无法将 Automapper 设为 return 派生类型
Can't get Automapper to return the derived type when the input is IQueryable
我可以将 Automapper 的 .Map
转换为 return 派生类型,但不能在 IQueryable
.
中
数据结构:
public class Order { }
public class OnlineOrder : Order { }
public class MailOrder : Order { }
public class OrderDto { }
public class OnlineOrderDto : OrderDto { }
public class MailOrderDto : OrderDto { }
设置(~复制 from documentation):
var mapperConfiguration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Order, OrderDto>()
.Include<OnlineOrder, OnlineOrderDto>()
.Include<MailOrder, MailOrderDto>();
cfg.CreateMap<OnlineOrder, OnlineOrderDto>();
cfg.CreateMap<MailOrder, MailOrderDto>();
});
var order = new OnlineOrder();
var orders = new List<Order> { order }.AsQueryable();
var mapper = mapperConfiguration.CreateMapper().Map<OrderDto>(order); // is of type OnlineOrderDto, it works!
我尝试过的:
var projectTo = orders.ProjectTo<OrderDto>(mapperConfiguration); // is of type OrderDto, boo!
var useAsDataSource = orders.UseAsDataSource(mapperConfiguration).For<OrderDto>(); // is of type OrderDto, boo!
我看过 documentation, this , the queryable extensions, and some answers involving LINQ。我觉得我错过了一些明显的东西。
我认为这是不可能的。请参阅此已关闭的错误报告:
https://github.com/AutoMapper/AutoMapper/issues/701
我可以将 Automapper 的 .Map
转换为 return 派生类型,但不能在 IQueryable
.
数据结构:
public class Order { }
public class OnlineOrder : Order { }
public class MailOrder : Order { }
public class OrderDto { }
public class OnlineOrderDto : OrderDto { }
public class MailOrderDto : OrderDto { }
设置(~复制 from documentation):
var mapperConfiguration = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Order, OrderDto>()
.Include<OnlineOrder, OnlineOrderDto>()
.Include<MailOrder, MailOrderDto>();
cfg.CreateMap<OnlineOrder, OnlineOrderDto>();
cfg.CreateMap<MailOrder, MailOrderDto>();
});
var order = new OnlineOrder();
var orders = new List<Order> { order }.AsQueryable();
var mapper = mapperConfiguration.CreateMapper().Map<OrderDto>(order); // is of type OnlineOrderDto, it works!
我尝试过的:
var projectTo = orders.ProjectTo<OrderDto>(mapperConfiguration); // is of type OrderDto, boo!
var useAsDataSource = orders.UseAsDataSource(mapperConfiguration).For<OrderDto>(); // is of type OrderDto, boo!
我看过 documentation, this
我认为这是不可能的。请参阅此已关闭的错误报告: https://github.com/AutoMapper/AutoMapper/issues/701