像下面这样的东西怎么样......
AutoMapper 配置文件
public sealed class SimpleInvestorProfile : Profile
{
// This is the approach starting with version 5
public SimpleInvestorProfile()
{
IMappingExpression<DataRow, dtoAPISimpleInvestor> mappingExpression;
mappingExpression = CreateMap<DataRow, dtoAPISimpleInvestor>();
mappingExpression.ForMember(d => d.FirmID, o => o.MapFrom(s => s["FirmID"]));
mappingExpression.ForMember(d => d.FirmName, o => o.MapFrom(s => s["FirmName"]));
mappingExpression.ForMember(d => d.Type, o => o.MapFrom(s => s["Type"]));
mappingExpression.ForMember(d => d.Location, o => o.MapFrom(s => s["Location"]));
}
// this method is obsolete in version 5
// protected override void Configure()
// {
// IMappingExpression<DataRow, dtoAPISimpleInvestor> mappingExpression;
// mappingExpression = CreateMap<DataRow, dtoAPISimpleInvestor>();
// mappingExpression.ForMember(d => d.FirmID, o => o.MapFrom(s => s["FirmID"]));
// mappingExpression.ForMember(d => d.FirmName, o => o.MapFrom(s => s["FirmName"]));
// mappingExpression.ForMember(d => d.Type, o => o.MapFrom(s => s["Type"]));
// mappingExpression.ForMember(d => d.Location, o => o.MapFrom(s => s["Location"]));
// return;
// }
}
注意:我使用 DataRow 类型作为源,而不是 IDataReader(更多内容见下文)。
使用个人资料
MapperConfiguration configuration;
configuration = new MapperConfiguration(a => {a.AddProfile(new SimpleInvestorProfile());});
IMapper mapper;
mapper = configuration.CreateMapper();
List<dtoAPISimpleInvestor> result;
result = mapper.Map<List<DataRow>, List<dtoAPISimpleInvestor>>(rows);
result 对象应包含正确数量的 dtoAPISimpleInvestor 对象和正确的数据。
注意:对mapper.Map 的调用采用List<DataRow> 类型的对象,该对象可以使用语句new List<DataRow>(dataTable.Rows.OfType<DataRow>()); 从DataTable 对象获得(因为Rows 的属性为DataTable 对象是一个实现了IEnumerable 但不是IEnumerable<T> 的集合。
这可能不是唯一的解决方案,但我已经验证它有效。
附带说明一下,我注意到您引用的 DynamicMap 方法在最新版本的库中已被标记为已过时,因此您可能希望避免使用它。