使用LINQ在VB.NET中将DataTable转换为Dictionary

3

我有一个 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"
    }
]

尝试使用此链接:http://www.aspdotnet-suresh.com/2013/05/c-convert-datatable-to-json-string-in-c.html - Niranjan Singh
1
然后创建一个类,将属性与列进行映射,并迭代行并将该类对象添加到泛型列表<yourClassObject>中。 - Niranjan Singh
1个回答

6

一个 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 语法 :| - adaam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接