我通过 Aftermap 向配置文件映射器发送一个值。
var provinces = await _repository.AsQueryable().ToListAsync();
var result = provinces.Select(item => _mapper.Map<GetProvincesDto>(item, x => x.AfterMap((src, dst) => dst.Language = "en"))).ToList();
现在,根据配置文件中发送的值,我想设置条件,如果输入语言的值为英语,我将映射英文名称,否则,我将映射另一个值。
public class ProvinceToGetProvincesDto : Profile
{
public ProvinceToGetProvincesDto()
{
CreateMap<Province, GetProvincesDto>()
.ForMember(x => x.Id, x => x.MapFrom(x => x.Id))
.ForMember(x => x.Name, x => x.MapFrom (x => x.language == "en" ? x.EnglishName.Value : x.Name.Value));
}
}
我怀疑无法将值传递到映射配置文件之外以执行映射。
你用
.AfterMap()
做的是正确的方向,只需要修改你的映射配置文件(规则)和AfterMap
动作。
public class ProvinceToGetProvincesDto : Profile
{
public ProvinceToGetProvincesDto()
{
CreateMap<Province, GetProvincesDto>()
.ForMember(x => x.Id, x => x.MapFrom(x => x.Id))
.ForMember(x => x.Name, x => x.MapFrom(x => x.Name.Value));
}
}
var result = provinces.Select(item => _mapper.Map<Province, GetProvincesDto>(item, opt =>
{
opt.AfterMap((src, dest) => dest.Name = lang == "en" ? src.EnglishName.Value : src.Name.Value);
})
).ToList();
参考:地图动作前后