如何在vb.net中将DataSet转换为Dictionary?

sri*_*ram 0 vb.net wcf

我的WCF服务函数返回类型是Dictionary(Of String,String).所以我必须将我的数据集转换为字典.

这是我的数据集示例.

帐户帐户名称

abc abc1

abc abc2

abc abc3

xyz xyz1

xyz xyz2

xyz xyz3

xyz xyz4

pqr pqr1

pqr pqr2

pqr pqr3

pqr pqr4

pqr pqr5

pqr pqr6

使用LINQ或不使用LINQ,如何将数据集转换为字典(字符串,字符串)

此致,RN

jer*_*jer 6

假设第二列是您可以执行此操作的键:

Dim ds As DataSet = someValueHere
Dim dc As New Dictionary(Of String, String)
For Each r As DataRow In ds.Tables(0).Rows
     dc.Add(r.Item(1).ToString(), r.Item(0).ToString())
Next
Run Code Online (Sandbox Code Playgroud)

不知道linq会不会有快捷方式。注意:字典不能包含重复的键,所以如果第一列对应键,第二列对应值,这是不可能的。


Eni*_*ity 5

这里有一些使用LINQ的选项.

最直接的"单线"是:

Dim dictionary =
    ds.Tables(0).Rows.OfType(Of DataRow)() _
        .ToDictionary(Function (dr) dr.Field(Of String)(0), _
            Function (dr) dr.Field(Of String)(1))
Run Code Online (Sandbox Code Playgroud)

我认为VB.NET lamdba语法有点难看,所以我喜欢把它们拉出来:

Dim fk As Func(Of DataRow, String) = Function (dr) dr.Field(Of String)(0)
Dim fv As Func(Of DataRow, String) = Function (dr) dr.Field(Of String)(1)

Dim dictionary = ds.Tables(0).Rows.OfType(Of DataRow)().ToDictionary(fk, fv)
Run Code Online (Sandbox Code Playgroud)

这甚至可能太难看了,所以这是一个选择:

Dim fn as Func(Of Integer, Func(Of DataRow, String)) = _
    Function (n) _
        Function (dr) _
            dr.Field(Of String)(n)

Dim dictionary = ds.Tables(0).Rows.OfType(Of DataRow)().ToDictionary(fn(0), fn(1))
Run Code Online (Sandbox Code Playgroud)

甚至按列名称:

Dim fs as Func(Of String, Func(Of DataRow, String)) = _
    Function (s) _
        Function (dr) _
            dr.Field(Of String)(s)

Dim dictionary =
    ds.Tables(0).Rows.OfType(Of DataRow)() _
        .ToDictionary(fs("AccountName"), fs("Account"))
Run Code Online (Sandbox Code Playgroud)

我希望这些帮助.