2013-11-25 4 views
4

Давайте предположим, что у меня есть следующие классыAutoMapper Пользовательские Отображения

public class foo 
{ 
    public string Value; 
} 


public class bar 
{ 
    public string Value1; 
    public string Value2; 
} 

Теперь я хочу, чтобы настроить автоматическую карту, чтобы Карта Value1 до значения, если Значение1 начинается с «А», но в противном случае я хочу карту Value2 к стоимости ,

Это то, что я до сих пор:

Mapper 
    .CreateMap<foo,bar>() 
    .ForMember(t => t.Value, 
     o => 
      { 
       o.Condition(s => 
        s.Value1.StartsWith("A")); 
       o.MapFrom(s => s.Value1); 
        <<***I want to throw Exception here***>> 
      }) 

Однако я знаю, как я могу дать значение 1 или значение 2 на условной основе, но не знаю, как поставить пользовательский код, вызовите функцию или бросить исключение

Руководство пользователя.

ответ

11

Вы можете передать лямбда-ResolveUsing:

.ForMember(f => f.Value, o => o.ResolveUsing(b => 
    { 
     if (b.Value1.StartsWith("A"));) 
     { 
      return b.Value1; 
     } 
     return b.Value2; 
    } 
)); 
+0

Я не хочу, чтобы дать ссылку на память, так что я не могу использовать ResolveUsing, есть ли возможность использовать то же самое с MapFrom? –

+1

Что вы подразумеваете под «дать ссылку на память»? –

+0

ResolveUsing использует ссылку, где, поскольку MapFrom использует значение отображаемого свойства. –

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