c# datatable automapper idatareader

c# - Uso de AutoMapper con DataTable con columnas faltantes



idatareader (1)

Estoy usando AutoMapper para asignar una tabla de datos a una lista.

En mi escenario, las columnas para la tabla de datos pueden cambiar dependiendo de una variable externa.

Puedo asignar con éxito la tabla de datos al objeto con lo siguiente:

AutoMapper.Mapper.CreateMap<IDataReader, Person>(); DataTableReader dtr = myDataTable.CreateDataReader(); List<Person> people = new List<Person>(); people = AutoMapper.Mapper.Map<List<Person>>(dtr);

Todo esto funciona bien Pero hay algunas propiedades que necesito convertir a entero en columnas que pueden existir o no en la tabla.

Ejemplo:

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

La columna "HowManyOrders" puede no existir siempre en la tabla, entonces, ¿cómo hago para verificar si la columna existe y luego convertir el valor si lo hace?


Debería poder usar 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; }