2013-07-02 2 views
1

Я использую AutoMapper для сопоставления данных, относящихся к списку.Использование AutoMapper с DataTable с отсутствующими столбцами

В моем сценарии столбцы для datatable могут меняться в зависимости от внешней переменной.

Я могу успешно отобразить DataTable к объекту ж/следующее:

AutoMapper.Mapper.CreateMap<IDataReader, Person>(); 

DataTableReader dtr = myDataTable.CreateDataReader(); 
List<Person> people = new List<Person>(); 

people = AutoMapper.Mapper.Map<List<Person>>(dtr); 

Это все работает отлично. Но есть некоторые свойства, которые мне нужно преобразовать в целое число в столбцы, которые могут или не могут существовать в таблице.

Пример:

AutoMapper.Mapper.CreateMap<IDataReader, Person>() 
    .FromMember(dest => dest.NumberOfOrders, opt => opt.MapFrom(src => Convert.ToInt32(src["HowManyOrders"]))); 

Столбец «HowManyOrders» не всегда может существовать в таблице, так как я могу идти о проверке, если столбец существует, а затем преобразование значения, если он делает?

ответ

1

Вы должны быть в состоянии использовать AfterMap:

Mapper.CreateMap<IDataReader, Person>() 
      .AfterMap((source, dest) => 
         { 
         if (ColumnExists(source, "HowManyOrders")) 
         { 
          dest.NumberOfOrders = 
            Convert.ToInt32(source["HowManyOrders"]); 
         } 
         }); 
    ... 

    public bool ColumnExists(IDataReader reader, string columnName) 
    { 
     for (int i = 0; i < reader.FieldCount; i++) 
     { 
      if (reader.GetName(i) == columnName) 
      { 
       return true; 
      } 
     } 

     return false; 
    } 
Смежные вопросы