【问题标题】:Using AutoMapper with DataTable with missing columns将 AutoMapper 与缺少列的 DataTable 一起使用
【发布时间】:2013-07-02 19:59:16
【问题描述】:

我正在使用 AutoMapper 将数据表映射到列表。

在我的场景中,数据表的列可能会根据外部变量而改变。

我可以通过以下方式成功地将数据表映射到对象:

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”列可能并不总是存在于表中,那么我该如何检查该列是否存在,如果存在则转换该值?

【问题讨论】:

    标签: c# datatable automapper idatareader


    【解决方案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;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多