我尝试使用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)));
});
答案 0 :(得分:0)
您可以使用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()));