繁体   English   中英

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

[英]Converting DataTable to Dictionary using LINQ in VB.NET

我有一个DataTable,它使用这个SQL从SQL表中提取结果:

SELECT firstName,lastName,companyName,address1,countryCode FROM dbo.users

我想将此DataTable转换为Dictionary-esque结构,其中上面每个字段的键是列名,值是该列的每个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"
    }
]

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")
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM