如何使用Dapper直接映射类对象,无需使用foreach循环完成赋值
你用的是Dapper数据库操作库,本身就自带自动映射能力,完全不需要手动写foreach循环赋值,可参考以下优化方案:
单条查询场景(你的示例属于按唯一ID查询,最多返回1条记录)
直接使用Dapper提供的QueryFirstOrDefaultAsync<T>()方法,会直接返回映射好的实体对象,没有匹配结果时返回null:
public class Person { public int Id { get; set; } public string Name { get; set; } public int Address { get; set; } } string select = "SELECT Id, Name, Address FROM emp where Id = 100"; string dbConnection="Server = TestServer; userid = XXXX; password = YYYYY; database = TestDB; port = 1234"; Person person = null; using (var connection = new MySqlConnection(dbConnection)) { person = await connection.QueryFirstOrDefaultAsync<Person>(select); }
保留QueryAsync方法的简化写法
如果你还是要用QueryAsync,直接从返回的集合中取对应元素即可,不需要手动遍历赋值:
using (var connection = new MySqlConnection(dbConnection)) { var resultList = await connection.QueryAsync<Person>(select); // 取第一条,和原逻辑返回多条时取最后一条就换成LastOrDefault person = resultList.FirstOrDefault(); }
补充说明
- 只要SQL返回的列名和实体类的属性名一致(不区分大小写),Dapper就会自动完成映射,不需要手动给每个属性赋值。如果列名和属性名不匹配,可以在SQL中用别名对齐,比如
SELECT user_name as Name FROM emp就能映射到Name属性。 - 批量查询多条记录的场景,直接把返回结果转成列表即可:
var personList = (await connection.QueryAsync<Person>(select)).ToList();
内容的提问来源于stack exchange,提问作者aka baka
相关产品推荐
相关产品推荐

