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

Insight.Database调用存储过程报错FastExpando不存在Set1定义

问题解决方法

核心错误原因

你混淆了结果集和输出参数的访问路径:Set1存储查询返回的结果集数据,属于QueryResults<T>返回的顶层结果对象,不属于Outputs属性。Outputs仅用于存储存储过程的输出参数、RETURN返回值,不会包含查询返回的结果集。

代码修正

将Set1的访问路径从x.Outputs.Set1改为直接从返回结果对象访问即可:

var x = _sqlConn.Connection().QueryResults<Results>("MyDb.dbo.get_records", new { id = theId });
int retVal = x.Outputs.Return_Value;

if (retVal == 0) // 表示结果集已正常返回,代码运行到此处无异常
{
    var list = x.Set1;      // 修改访问路径即可解决报错
    var temp = list.FirstOrDefault();
}

其他排查方向

如果修改后仍有报错,可按以下顺序排查:

  • 确认自定义Results类的定义符合要求:必须包含公开的Set1属性,属性类型和结果集返回的实体列表类型匹配,示例定义如下:
public class Results
{
    // 替换Record为你实际的结果集实体类型
    public IList<Record> Set1 { get; set; }
}
  • 不想自定义结果类可以直接使用多泛型参数的重载,写法如下:
// 第一个泛型参数对应第一个结果集Set1的元素类型,多个结果集依次追加泛型参数即可
var x = _sqlConn.Connection().QueryResults<Record>("MyDb.dbo.get_records", new { id = theId });
int retVal = x.Outputs.Return_Value;
if (retVal == 0)
{
    var list = x.Set1;
}
  • 若还是出现FastExpando相关报错,可将返回对象转为字典排查实际包含的属性:
// FastExpando实现了IDictionary接口,可以直接遍历所有属性名确认返回内容
var resultDict = x as IDictionary<string, object>;
foreach (var propName in resultDict.Keys)
{
    // 输出所有属性名,确认是否存在你需要的结果集属性
    Debug.WriteLine(propName);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:36:03