使用AutoMapper与缺少列数据表(Using AutoMapper with DataTabl

2019-10-18 08:12发布

我使用AutoMapper映射一个DataTable添加到列表中。

在我的情况下,对于数据表中的列可能会改变取决于外部变量。

我可以成功地将数据表映射到对象W /如下:

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”可能并不总是存在于表,让我怎么去,如果列中存在检查,然后转换值,如果它呢?

Answer 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;
    }


文章来源: Using AutoMapper with DataTable with missing columns