C#中无需使用模型遍历Dapper.Net查询结果的实现方法
Dapper无Model直接访问查询结果的解决方案
不需要强制映射到Model类,可以直接访问返回结果的字段值,以下是两种常用实现方式:
方式1:dynamic类型访问(最便捷)
Dapper无泛型的Query方法实际返回类型为IEnumerable<dynamic>,你可以直接修改变量声明后通过字段名访问值:
string query = "exec dbo.storeProcedure @jsonData, @mainDocJSON, @supportingDocsJSON"; // 直接声明为dynamic类型集合 IEnumerable<dynamic> queryResult; using (var connection = new SqlConnection(connectionString)) { queryResult = connection.Query(query, new { jsonData = jsonData, mainDocJSON = mainDocJSON, supportingDocsJSON = supportingDocsJSON }); } // 遍历校验逻辑示例 foreach (var row in queryResult) { // 直接用SQL返回的列名访问即可,大小写不敏感 if (row.col1 == 5) { // 此处写入你的业务逻辑 } } // 原有的返回JSON逻辑无需修改,可直接序列化dynamic对象 return Ok(queryResult);
方式2:字典形式访问(类型更安全)
如果你担心dynamic拼写字段名导致运行时错误,可以将每行转为IDictionary<string, object>通过键名访问:
foreach (IDictionary<string, object> row in queryResult) { // 可提前做类型转换和空值校验 if (row.TryGetValue("col1", out var col1Val) && Convert.ToInt32(col1Val) == 5) { // 此处写入你的业务逻辑 } }
注意事项
- 访问的字段名必须和SQL查询返回的列名完全匹配,否则dynamic方式会抛出运行时异常
- 若返回字段为可空类型,建议提前做空值校验,避免空引用异常
- 原有返回
Ok(queryResult)的逻辑无需调整,序列化后的JSON结构和映射到Model返回的效果完全一致
内容的提问来源于stack exchange,提问作者Qiuzman
相关产品推荐
相关产品推荐

