在我的上下文中,我有FilterList
个实体和Maintainer
个实体,它们通过结点FilterListMaintainer
实体共享多对多关系。
我正在用下面的Automapper映射填充DTO。
public class ListDetailsDto
{
...
public IEnumerable<ListMaintainerDto> Maintainers { get; set; }
...
}
public class ListDetailsDtoMappingProfile : Profile
{
public ListDetailsDtoMappingProfile() =>
CreateMap<FilterList, ListDetailsDto>()
.ForMember(d => d.Maintainers,
c => c.MapFrom(l => l.FilterListMaintainers.Select(m => m.Maintainer)))
...;
}
我也将IEnumerable
子DTO映射如下:
public class ListMaintainerDto
{
...
public IEnumerable<MaintainerAdditionalListsDto> AdditionalLists { get; set; }
...
}
public class ListMaintainerDtoMappingProfile : Profile
{
public ListMaintainerDtoMappingProfile() =>
CreateMap<Maintainer, ListMaintainerDto>()
.ForMember(d => d.AdditionalLists,
c => c.MapFrom(m => m.FilterListMaintainers.Select(lm => lm.FilterList)))
...;
}
该映射用于类似以下的调用中:
public async Task<ListDetailsDto> GetDetailsAsync(uint id) =>
await DbContext.FilterLists.ProjectTo<ListDetailsDto>(ConfigurationProvider)
.FirstOrDefaultAsync(x => x.Id == id);
问题:
如何最好地将祖父母FilterList
从每个孙子的AdditionalLists
属性中排除(因为AdditionalLists
表示“祖父母列表之外”)?换句话说,返回的ListDetailsDto
实例应包含ListMaintainerDto
的集合,每个集合都包含自己的列表的集合,但不包括ListDetailsDto
表示的列表。
在CreateMap<>()
调用中是否有某种排除它的方法?还是我需要在调用FirstOrDefaultAsync()
之后将其过滤掉(如果是,以async
的方式进行清理的干净方法是什么?)?