2016-09-28 3 views
0

Попытка отобразить следующуюСвести вложенные списки Automapper

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)) 
} 
+0

Я смущен. Вы не можете сопоставить коллекцию всего лишь одного экземпляра этой вещи. Если, конечно, вы не делаете какой-либо агрегации или не берете один экземпляр из коллекции. Что должно быть «LocationID» и «LocationName» действительно, когда вы набираете «WorkPreference»? – MarioDS

+0

Вы можете, если хотите сгладить .. Как вы делаете с SelectMany в LINQ .. – Mortalus

+0

Значение для каждой записи местоположения Я хотел бы создать новый объект WorkPreferanceViewModel ... – Mortalus

ответ

0

Я боюсь, что AutoMapper не может этого сделать. Он может отображать отдельные объекты в отдельные объекты и набор объектов в коллекцию объектов.

Что вы хотите сделать, это сопоставить один объект с коллекцией другого объекта. Я не могу придумать, как использовать AutoMapper для достижения этого.

Но, я должен сказать, я действительно не понимаю, почему вы определили свою модель взгляда таким образом. Зачем вам повторять Id и Name столько раз? Каким образом ваша предлагаемая структура становится более легкой в ​​обработке?

Что бы я сделал, создайте LocationViewModel и получите WorkingPreferenceViewModel. IEnumerable<LocationViewModel>. Таким образом вы можете легко сопоставить его с AutoMapper, создавая карты между объектами и их соответствующими моделями просмотров. Он аккуратно позаботится о том, что там есть коллекция.

Смежные вопросы