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

时间:2011-08-05 02:41:19

标签: 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

3 个答案:

答案 0 :(得分: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))

我认为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)

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

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

甚至是列名:

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

我希望这些帮助。

答案 1 :(得分:4)

假设第二列是关键,你可以这样做:

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

我不知道linq是否会有快捷方式。 注意:字典不能包含重复键,因此如果第1列对应于键的第2列和第2列,则不可能。

答案 2 :(得分:2)

以下是LINQ的一个示例,使用了jerjer的答案(第二列是键)的相同假设:

Dim dict As Dictionary(Of string, string) = (From a In ds.Tables(0).AsEnumerable()
                                            Select New With
                                            {
                                                .Key = a.Field(Of String)("AccountName"),
                                                .Val = a.Field(Of String)("Account")
                                            }).AsEnumerable().ToDictionary(Function(k) k.Key, Function(v) v.Val)

语法可能有些偏差,因为我没有那么多VB.NET,但这应该给你一般的想法。