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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:36:03