展平嵌套列表Automapper

时间:2016-09-28 11:15:29

标签: automapper flatten

尝试映射以下内容

public class WorkPreferance
{
    public int ID { get; set; }
    public string Name { get; set; }
    public IEnumerable<Location> PreferedLocations { get; set; }
}

public class Location
{
    public int LocationID { get; set; }
    public string LocationName { get; set; }
}

到以下目的地...

public class WorkingPreferenceViewModel
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int LocationID { get; set; }
    public string LocationName { get; set; }
}

但是我无法绕过应该是映射减速的东西。 到目前为止我有这个:

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<Location, WorkingPreferenceViewModel>()
        .ForMember(d => d.LocationID, o => o.MapFrom(s => s.LocationID))
        .ForMember(d => d.LocationName, o => o.MapFrom(s => s.Description))
        .ForAllOtherMembers(o => o.Ignore());

    cfg.CreateMap<WorkPreferance, WorkingPreferenceViewModel>()
        .ForMember(d => d.LocationID, o => o.MapFrom(s => s.PreferedLocations))
        .ForMember(d => d.LocationName, o => o.MapFrom(s => s.PreferedLocations))
}

1 个答案:

答案 0 :(得分:0)

我担心AutoMapper无法做到这一点。它可以将单个对象映射到单个对象,将对象集合映射到对象集合。

您要做的是将单个对象映射到另一个对象的集合。我想不出你将如何使用AutoMapper实现这一目标。

但是,我必须说,我真的不明白为什么你这样定义了你的viewmodel。为什么要重复IdName这么多次?您建议的结构以何种方式变得更容易处理?

我要做的是创建LocationViewModelWorkingPreferenceViewModel包含IEnumerable<LocationViewModel>。这样,您可以通过在对象及其各自的视图模型之间创建地图,轻松地使用AutoMapper进行映射。它将巧妙地处理那里有一个集合的事实。