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()));