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

如何将Dapper查询结果转换为字典列表?

解决Dapper查询结果转字典列表的问题

直接用Dapper默认返回的DapperRow转字典时,强转IDictionary<string, object>只是拿到接口实例,本质还是DapperRow对象。要得到纯字典列表,需要把每个DapperRow的键值对复制到新的Dictionary中:

正确实现代码

using (var dbContext = await SqlServerRepository.OpenConnection())
{
    string sql = @"SELECT DISTINCT YEAR(DateSearch) YearValue
                   FROM KeySearch
                   ORDER BY YearValue;";
    // 先获取DapperRow列表,再逐个转成Dictionary
    var dapperRows = (await dbContext.QueryAsync(sql)).ToList();
    var dictList = dapperRows.Select(row => 
        new Dictionary<string, object>(row as IDictionary<string, object>)
    ).ToList();
    
    // 如果只是给SelectList用,其实直接用DapperRow也能正常读取YearValue(它是动态对象)
    // 但如果确实需要字典列表,上面的dictList就是你要的结果
    ViewBag.Years = new SelectList(dictList, "YearValue", "YearValue");
}

为什么之前的方法无效

  • QueryAsync<Dictionary<string,object>>(sql):Dapper没有内置将查询结果映射到Dictionary的逻辑,所以返回空字典。
  • result.Select(row => (IDictionary<string, object>)row).ToList():DapperRow本身实现了IDictionary<string, object>接口,强转后只是换了接口类型,实例还是DapperRow,不是纯Dictionary对象。

内容的提问来源于stack exchange,提问作者J Xkcd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:02:06