我需要将对象列表中的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])
知道我做得不对吗?
答案 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配置,以便在Location
和int
之间进行映射,然后它会为您完成剩下的工作:
cfg.CreateMap<Location, int>().ConvertUsing(source => source.LocationId);
cfg.CreateMap<Parent, Destination>().ForMember(dest => dest.Locations, opts => opts.MapFrom(src => src.Locations));
有关工作示例,请参阅this Gist。