如何将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
相关产品推荐
相关产品推荐

