我有一个 DataTable,它使用以下 SQL 从 SQL 表中提取结果:
SELECT firstName,lastName,companyName,address1,countryCode FROM dbo.users
我想将此 DataTable 转换为字典式结构,上面每个字段的键是列名,值是该列的每个 DataRow 的值。我对如何在 C# 中执行此操作有一个模糊的想法,但 VB.NET LINQ 语法完全不同,所以我正在努力弄清楚如何执行此操作..
结构(在 JSON 中可视化)是这样的:
[
{
"firstName": "Adam",
"lastName": "Smith",
"address1": "123 Old St",
"companyName": "Fake Company",
"countryCode": "us"
},
{
"firstName": "Paul",
"lastName": "Jones",
"address1": "474 Old St",
"companyName": "Fake Company",
"countryCode": "gb"
}
]
最佳答案
A Dictionary(Of String, String)
将尽可能地像字典一样:
Dim result As IEnumerable(Of Dictionary(Of String, String)) =
From r As DataRow In myDataTable.AsEnumerable()
Select New Dictionary(Of String, String) From {
{ "firstName", r.Field(Of String)("firstName") },
{ "lastName", r.Field(Of String)("lastName") },
{ "address1", r.Field(Of String)("address1") },
{ "companyName", r.Field(Of String)("companyName") },
{ "countryCode", r.Field(Of String)("countryCode") }
}
你也可以使用匿名类型:
Dim result2 =
From r In myDataTable.AsEnumerable()
Select New With {
.firstName = r.Field(Of String)("firstName"),
.lastName = r.Field(Of String)("lastName"),
.address1 = r.Field(Of String)("address1"),
.companyName = r.Field(Of String)("companyName"),
.countryCode = r.Field(Of String)("countryCode")
}
或者,如评论中所建议的,您可以创建一个类并返回它:
Public Class User
Public Property firstName As String
Public Property lastName As String
Public Property address1 As String
Public Property companyName As String
Public Property countryCode As String
End Class
Dim result3 =
From r In myDataTable.AsEnumerable()
Select New User With {
.firstName = r.Field(Of String)("firstName"),
.lastName = r.Field(Of String)("lastName"),
.address1 = r.Field(Of String)("address1"),
.companyName = r.Field(Of String)("companyName"),
.countryCode = r.Field(Of String)("countryCode")
}
关于vb.net - 在 VB.NET 中使用 LINQ 将数据表转换为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24325606/