Automapper со свойствами навигации EF

Я пытаюсь отобразить две коллекции с помощью навигационного свойства EF.

Collection.Items это List<Item>

CollectionDTO имеет навигационное свойство для таблицы перекрестного соединения под названием CollectionItem, который имеет другое навигационное свойство Item,

Я хочу каждый CollectionDTO.CollectionItem.Item сопоставить с Collection.Item,

Я пробовал это, но я не могу понять это.

Может кто-нибудь помочь?

var mapperConfig = new MapperConfiguration(cfg =>
{
    // CreateMap<source, destination>()    
    cfg.CreateMap<Collection, CollectionDTO>()
        .ForMember(dest => dest.Items,
                   opts => opts.MapFrom(src =>
                       src.CollectionItems.Where(x => x.CollectionId == src.Id).ToList().ForEach(ci => ci.Item)));

});

1 ответ

Решение

Ты можешь использовать Select метод расширения как это:

// CreateMap<source, destination>()    
    cfg.CreateMap<Collection, CollectionDTO>()
       .ForMember(dest => dest.Items,
                   opts => opts.MapFrom(src =>
                       src.CollectionItems.Select(ci=>ci.Item).ToList()));

Если Item свойство навигации является коллекцией, затем используйте SelectMany метод расширения:

// CreateMap<source, destination>()    
    cfg.CreateMap<Collection, CollectionDTO>()
       .ForMember(dest => dest.Items,
                   opts => opts.MapFrom(src =>
                       src.CollectionItems.SelectMany(ci=>ci.Item).ToList()));
Другие вопросы по тегам