vb.net - 在 VB.NET 中使用 LINQ 将数据表转换为字典

标签 vb.net linq datatable

我有一个 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/

相关文章:

c# - 使用 Lambda 表达式创建自定义列表

c# - 将字典列表转换为数据表

javascript - 如何将 VB 变量传递给 JQuery

vb.net - 创建表单时出错。有关详细信息,请参阅 Exception.InnerException。错误是 : Object reference not set to an instance of an object

c# - VB.Net "IsDBNull"的 C# 等效项是什么

c# - 如何从linq group by中的数据表中选择多列?

c# - DLL 引用有多昂贵?

linq列表字符串像

javascript - 如何从数据表内的链接调用 Vue.js 方法?

c# - 如何在一行中合并多个数据表(每个数据表返回一行)