例如,我有第一个对象是源
class PersonEntity
{
public string FirstName {get; set;}
public string LastName {get; set;}
}
,目的地为
class PersonDto
{
public string Name {get; set;}
}
和enum
enum NameMode
{
first,
full
}
我的映射配置文件创建的地图看起来像这样
CreateMap<(PersonEntity, NameMode), PersonDto>()
.ForMemeber(dest => desat.Name, opt => opt.MapFrom<NameCustomeResolver>()));
根据传入的enum值,我将从源组合姓和名,或者只是使用名字,现在的问题是,我想用这个将PersonEntity列表映射到PersonDto列表
i tried this
List<PersonEntity> source = new List<PersonEntity>();
List<PersonDto> destination = mapper.Map<List<PersonDto>>((source, NameMode.full));
我得到了异常
缺少类型映射配置或不支持映射。
经过一番研究,我尝试了以下
var result = source.AsQueryable().Select(p => (p, NameMode.full)).ProjectTo<PersonDto>(mapper.ConfigurationProvider);
但是这个有语法错误
表达式树不能包含元组文字
我只是想实现将PersonEntity列表映射到PersonDto列表
你可以试试:
var destination = mapper.Map<List<PersonDto>>(source.Select(x => (x, NameMode.full)));
之所以有效,是因为source.Select(x => (x, NameMode.full))
将创建元组(PersonEntity, NameMode)
的可枚举对象,因为您已经在(PersonEntity, NameMode)
和PersonDto
之间配置了映射。Automapper将自动处理IEnumerable<(PersonEntity, NameMode)>
和IEnumerable<PersonDto>
之间的映射。