You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:09:02