我的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
假设第二列是您可以执行此操作的键:
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会不会有快捷方式。注意:字典不能包含重复的键,所以如果第一列对应键,第二列对应值,这是不可能的。
这里有一些使用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)
我希望这些帮助.