首页 > 解决方案 > 时间:2019-01-10 标签:c#mapperobject,具有列表中的一个属性

问题描述

我有一个关于引擎名称、引擎马力和列表 carid 的请求。如何将 EngineTMP 映射到 EngineModelDto?

Table engine:
    id, name, hp, carid
    
    public class EngineModelDto
    {
        public string Name { get; set; }
        public int Hp { get; set; }
        public Guid CarId { get; set;}
    }
    public class EngineTMP
    {
        public string Name { get; set; }
        public int Hp { get; set; }
        public List<Guid> CarIds { get; set; }
    }

我想做类似这样的伪代码:(但使用自动映射器)

List<EngineModelDto> myListDto = new List<EngineModelDto>();
for(int i = 0; i < CarIds.lenght - 1; i++)
    {
        var e = new EngineModelDto {
            Name = EngineTMP.name,
            Hp = EngineTMP.hp,
            CarId = EngineTMP.CarIds[i];
        }
    
        list.Add(e);
    }

标签: c#automapper

解决方案


对于这样一个简单的映射,您不妨手动执行此操作:

var dtos = engineTmp.CarIds.Select(id => new EngineModelDto
{
    Name = engineTmp.Name,
    Hp = engineTmp.Hp,
    CarId = id,
});

但是,如果你坚持使用 AutoMapper,你可以这样做:

CreateMap<EngineTMP, IEnumerable<EngineModelDto>>()
    .ConvertUsing(src => src.CarIds?.Select(id => new EngineModelDto
    {
        Name = src.Name,
        Hp = src.Hp,
        CarId = id,
    }));

然后:

var dtos = mapper.Map<IEnumerable<EngineModelDto>>(engineTmp);

推荐阅读