2016-10-07 4 views
0
public partial class Source() 
{ 
    ............... 
    public string Assignees { get; set; } 
    ................... 
} 
public partial class Destination 
{ 
    ............... 
    public List<int> Resources { get; set; } 
    ................... 
} 

Я картографирование этих классов как этогоразделенных запятых строки Списка междунар Automapper

Mapper.CreateMap<Source, Destination>().ForMember(x => x.DestID, y => y.MapFrom(z => z.SrcID));//Automapper version 4.2.1.0 

Я получаю ожидаемые результаты для всех значений, но проблема с полем правопреемниками в Source, который разделен запятой. Он содержит данные, такие как «1,4,6,8»

Что я ожидаю:

Я хочу, чтобы преобразовать в Список Int при отображении происходит.

Просьба указать любые вводимые значения. Спасибо.

+1

Это синтаксический разбор строки, а не отображение объектов или свойств. Должен быть способ указать функцию преобразования в сопоставлении –

+0

Я согласен с @PanagiotisKanavos, это анти-шаблон, потому что mappers должны быть немыми, и, следовательно, вы можете противостоять соблазну слишком много логики внутри их. –

ответ

2

Попробуйте использовать метод для анализа внутри класса картографа:

Mapper.CreateMap<Source, Destination>() 
     .ForMember(x => x.Resources , y => y.MapFrom(z => getAssignees(z.Assignees))); 



private List<int> getAssignees(string model) 
     { 

      if (string.IsNullOrEmpty(model)) 
      { 
       return null; 
      } 

      return model.Split(',').Select(int.Parse).ToList(); 

     } 
+1

Это не сработает. Нельзя использовать 'Cast' для преобразования строки в целое. Вместо этого используйте 'Select (int.Parse)'. – jeroenh

+0

@ jeroenh обновлен. Thx – Mate

+0

Большое спасибо. Точно работал, как ожидалось. – user2645738

0

Как правило, для преобразования string в список int Я бы использовать Linq:

var str = "1,2,3,4"; 
var lst = str.Split(',').Select(int.Parse).ToList(); 

Чем вы можете использовать список любым способом:

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

  • Нет связанных вопросов^_^