Automapper将int属性值从List <type>映射到List <int>

时间:2017-01-31 15:45:45

标签: c# automapper

我需要将对象列表中的int属性映射到List<int>。 这是我的类结构:

我有一个父类:

public class Parent
{
    ...
    public List<Location> Locations { get; set; }
}

位置等级:

public class Location
{
    public int LocationId { get; set; }
    public string Name { get; set; }
}

映射的目标类:

public class Destination
{
    ...
    public List<int> Locations { get; set; }
}

以下是我尝试用来完成List<Location>List<int>之间映射的代码:

CreateMap<Parent, Destination>()
.ForMember(d => d.Locations, o => o.MapFrom(s => s.Locations.Select(l => l.LocationId)))

这不起作用。我收到以下错误:

  

AutoMapper.AutoMapperMappingException:无法从 Location.LocationId创建地图表达式       (System.Collections.Generic.IEnumerable`1 [System.Int32]) Destination.Locations(System.Collections.Generic.List`1 [System.Int32])

知道我做得不对吗?

2 个答案:

答案 0 :(得分:3)

正如例外所说:

  

AutoMapper.AutoMapperMappingException:无法从Location.LocationId(System.Collections.Generic。 IEnumerable 1 [System.Int32])创建映射表达式到Destination.Locations(System.Collections.Generic。的列表 1 [System.Int32])

我相信这是因为您尝试将IEnumerable映射到List。 您可以在ToList()之后的地图表达式中添加Select。 (不建议) 或者在我的目标类中将Locations属性声明为IEnumerable<int>

答案 1 :(得分:0)

您需要更改AutoMapper配置,以便在Locationint之间进行映射,然后它会为您完成剩下的工作:

cfg.CreateMap<Location, int>().ConvertUsing(source => source.LocationId);
cfg.CreateMap<Parent, Destination>().ForMember(dest => dest.Locations, opts => opts.MapFrom(src => src.Locations));

有关工作示例,请参阅this Gist