如何将List<DapperRow>转换为自定义实体类?
如何将List转换为List<Entity.Account>
针对你已经拿到List<DapperRow>的情况,有几种实用的转换方式:
1. 手动LINQ映射(适合字段较少的场景)
直接通过LINQ的Select方法,逐个将DapperRow的字段值赋值给Entity.Account的属性:
var accountList = ss.Select(row => new Entity.Account { Id = (int)row["Id"], Username = (string)row["Username"], Email = (string)row["Email"], // 按Account类的属性依次完成映射 }).ToList();
2. 使用Dapper自带的Get<T>方法(类型更安全)
DapperRow提供了Get<T>扩展方法,可以指定字段名和目标类型,避免强制转换的风险:
var accountList = ss.Select(row => new Entity.Account { Id = row.Get<int>("Id"), Username = row.Get<string>("Username"), Email = row.Get<string>("Email"), // 其他属性同理 }).ToList();
3. 自动映射(适合字段较多的场景)
如果你的Entity.Account属性和数据库字段名一致,可以用AutoMapper完成自动映射,需要先安装AutoMapper NuGet包:
// 配置映射规则 var mapperConfig = new MapperConfiguration(cfg => { cfg.CreateMap<DapperRow, Entity.Account>(); }); var mapper = mapperConfig.CreateMapper(); // 执行转换 var accountList = ss.Select(mapper.Map<Entity.Account>).ToList();
额外建议
其实最高效的方式是直接在查询时获取强类型列表,也就是你一开始了解的写法:
var accountList = db.Query<Entity.Account>("Select * From Account").ToList();
这样可以跳过后续的转换步骤,Dapper会直接在查询过程中完成类型映射,既简洁又高效。
内容的提问来源于stack exchange,提问作者user123456
相关产品推荐
相关产品推荐

