2017-02-17 2 views
0

Я DTO как это:Как проекция на лист с помощью AutoMapper

public class OrderDTO 
{ 
    public Guid OrderID { get; set; } 
    public DateTime OrderDate { get; set; } 
    public List<OrderItemDTO> OrderItems 
} 

public class OrderItemDTO 
{ 
    public string ItemName { get; set; } 
    public int Quantity { get; set; } 
    public decimal Price { get; set; } 
} 

Когда я проекция Order объект в OrderDTO используя AutoMapper

return context.Orders 
    .Include(o => o.OrderItems.Select(oi => oi.Item)) 
    .Where(o => o.OrderID == orderID) 
    .Project().To<OrderDTO>() 
    .SingleOrDefault(); 

Я получаю сообщение об ошибке:

LINQ to Entities does not recognize the method 'System.Collections.Generic.List 1[DTO.OrderItemDTO] ToList[OrderItemDTO](System.Collections.Generic.IEnumerable 1[DTO.OrderItemDTO])' method, and this method cannot be translated into a store expression.

Это мой переводчик:

Mapper.CreateMap<Order, OrderDTO>(); 
Mapper.CreateMap<OrderItem, OrderItemDTO>(); 

Если изменить List<OrderItemDTO> к IEnumerable<OrderItemDTO>, она работает, но мне нужно в List<OrderItemDTO>, чтобы управлять содержимым списка.

Есть ли способ, как это решить?

+0

Какую версию автопортрета вы используете? –

+0

@YashveerSingh Я использую Automapper 3.3.1 – Willy

ответ

1

Вы заявили, что используете AutoMapper 3.3.1 - эта версия была выпущена более 2 лет назад, и с тех пор было сделано много улучшений (особенно вокруг прогнозов LINQ).

Я бы рекомендовал обновить AutoMapper и посмотреть, исчезла ли проблема.

+0

Спасибо, я обновил automapper и связанную с ними библиотеку. Оно работает – Willy

Смежные вопросы