ada*_*aam 3 linq vb.net datatable
我有一个 DataTable,它使用此 SQL 从 SQL 表中提取结果:
SELECT firstName,lastName,companyName,address1,countryCode FROM dbo.users
Run Code Online (Sandbox Code Playgroud)
我想将此 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"
}
]
Run Code Online (Sandbox Code Playgroud)
ADictionary(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") }
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用匿名类型:
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")
}
Run Code Online (Sandbox Code Playgroud)
或者,正如评论中所建议的,您可以创建一个类并返回:
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")
}
Run Code Online (Sandbox Code Playgroud)