通过映射器配置文件中的aftermap对输入值放置条件

问题描述 投票:0回答:1

我通过 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));
    }
}
c# automapper mapper
1个回答
0
投票

我怀疑无法将值传递到映射配置文件之外以执行映射。

你用

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

参考:地图动作前后

© www.soinside.com 2019 - 2024. All rights reserved.