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

VB.NET API开发类型转换错误求助:无法将List转IEnumerable

解决VB.NET API中InvalidCastException类型转换错误

问题原因

你的API方法声明返回IEnumerable(Of Visitor),但调用存储过程pa_Visitors_GetOnSite后得到的是List(Of pa_Visitors_GetOnSite_Result)——这两个是完全独立的实体类型,无法直接隐式转换,因此抛出InvalidCastException。

解决方案

1. 显式属性映射(最通用的生产级方案)

如果pa_Visitors_GetOnSite_Result和Visitor的属性结构一致,通过LINQ的Select方法手动将每个结果对象映射为Visitor实例:

Namespace Controllers
    Public Class VisitorsController
        Inherits ApiController

        Public Function [Get]() As IEnumerable(Of Visitor)
            Using entities As SignInSystemLiveEntities = New SignInSystemLiveEntities()
                Return entities.pa_Visitors_GetOnSite() _
                    .Select(Function(res) New Visitor() With {
                        .VisitorId = res.VisitorId, ' 替换为你的实际属性名
                        .FullName = res.FullName,
                        .IsOnSite = res.IsOnSite,
                        ' 依次映射所有需要对外暴露的属性
                    }).ToList()
            End Using
        End Function
    End Class
End Namespace

2. 修改EF模型让存储过程直接返回Visitor实体

若使用Entity Framework的EDMX模型:

  • 打开EDMX设计器,找到存储过程pa_Visitors_GetOnSite
  • 右键选择添加函数导入,在设置面板中将返回类型指定为Visitor(而非自动生成的pa_Visitors_GetOnSite_Result)
  • 保存模型并重新生成代码,此时entities.pa_Visitors_GetOnSite()会直接返回IEnumerable(Of Visitor)

3. 临时调整返回类型(仅适合调试)

如果只是快速验证功能,可以直接修改方法返回类型为存储过程生成的结果类型:

Public Function [Get]() As IEnumerable(Of pa_Visitors_GetOnSite_Result)
    Using entities As SignInSystemLiveEntities = New SignInSystemLiveEntities()
        Return entities.pa_Visitors_GetOnSite.ToList()
    End Using
End Function

注意:该方案会让API暴露EF自动生成的内部实体,不符合分层架构设计原则,不建议用于生产环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 19:25:22