提问人:Massey 提问时间:6/20/2023 最后编辑:djvMassey 更新时间:6/23/2023 访问量:71
如何在 VB.Net 中循环访问匿名类型的 IEnumerable
How to loop through IEnumerable of anonymous type in VB.Net
问:
我以数据表的形式从 SQL 服务器获取数据。我按 VendorID 对数据进行分组,如果字段有多个值,则连接行数据。下面给出了此代码,它工作正常。
Dim dt As DataTable = GetVendorData()
Dim results = From p In dt.AsEnumerable()
Group p By VendorID = p.Field(Of String)("VenID") Into g = Group
Select New With {
Key .VendorID = VendorID,
Key .FundNumber = String.Join(";", From i In g Select i.Field(Of String)("FundNumber")),
Key .Statefund = String.Join(";", From i In g Select i.Field(Of String)("Statefund")),
Key .State = String.Join(";", From i In g Select i.Field(Of String)("State"))
}
我尝试遍历并获取各个字段数据,如下所示
For Each result As DataRow In results
Dim x As String = result.Field(Of String)("FundNumber"))
Next
但是我收到以下错误。
System.InvalidCastException
HResult=0x80004002
消息 = 无法将类型为“VB$AnonymousType_1”4[System.String,System.String,System.String,System.String]“的对象强制转换为类型”System.Data.DataRow”
答:
1赞
djv
6/20/2023
#1
您返回的是一个匿名类型,其中
Select New With {
Key .VendorID = VendorID,
Key .FundNumber = ...
您应该能够将 result 用作匿名类型并访问创建的 FundNumber 字段
For Each result In results
Dim x As String = result.FundNumber
Next
顺便说一句,错误消息
无法强制转换类型为“VB$AnonymousType_1”的对象...键入“System.Data.DataRow”
很清楚
评论
0赞
Massey
6/20/2023
我也试过了。但是,它甚至无法编译。我收到此错误:“未声明”结果”。由于其保护级别,它可能无法访问”
1赞
Massey
6/23/2023
#2
我在 .vb 文件的顶部添加了这一行,解决了这个问题:
选项推断
评论
New With { ...
For Each result As DataRow In results
For Each result in results