2013-06-07 2 views
2

я хочу карту одного типа к другому, но у меня есть несколько свойств в первом типе, который требуется, чтобы получить одно свойство другого типаautomapper многих один отображение

, например

public class A 
{ 
    public int a{get;set;} 
    public int b{get;set;} 
    public int c{get;set} 
} 

public class B 
{ 
    public C z{get;set;} 
    public int c{get;set} 
} 

public class C 
{ 
    public int a{get;set;} 
    public int b{get;set;} 
    public int Total{get;set} 
} 

public class D 
{ 
    public C Get(A a) 
    { 
     var c = new C(); 
     c.a = a.a; 
     c.b= b.a; 
     c.c = c.a + c.b; 
     return c 
    } 
} 

здесь я хочу отобразить А в в, так как я могу сделать это с помощью Automapper

ответ

3

Вы можете использовать ForMember на карту из ваших простых типов для вашего сложного типа, как это:

AutoMapper.CreateMap<A,B>() 
.ForMember(dest => dest.z.a, opt => opt.MapFrom(src => src.a)); 

Вы можете связать столько из этих ForMember вызовов, сколько вам нужно.

Другой подход будет настроить карту для А до С, что:

AutoMapper.CreateMap<A,C>(); 

, а затем в вашем отображение из А в В можно сказать:

AutoMapper.CreateMap<A,B>() 
.ForMember(dest => dest.z, opt => opt.MapFrom(src => src)) 

Это говорит AutoMapper к используйте сопоставление от A до C для члена z при выполнении сопоставления от A до B (Так как src является экземпляром A и dest является экземпляром C)

Update

Если вам нужно использовать D класс Get метод, чтобы сделать ваши отображения от А до С, то вы можете сделать это, используя метод ConstructUsing в AutoMapper.

AutoMapper.CreateMap<A,B>() 
.ForMember(dest => dest.z, opt => opt.ConstructUsing(src => new D().Get(src)); 
+0

, но мне нужно, чтобы получить C из Получить функции D, как я не имею г в классе А – rajansoft1

+0

Почему вы должны сделать это? Задача автопилота - работать с отображениями. В вашем примере вы отнимаете работу от automapper и выполняете отображение в методе Get. Это не обязательно. –

+0

, но я хочу, чтобы automapper использовал эту функцию и передал объект класса A, чтобы получить c, а затем отобразить в класс B с вычисленным значением C, возможно ли это – rajansoft1

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