我正在尝试使用linq查询从vb中的datable查询值,但遇到了几个错误。
这是我的代码:
For Each cl In clients
Dim cn As DataTable
cn = getClients() #datatable with two columns, client code (cln_idck) and client name (cln_name)
Dim clientname As String
clientname = From cntable In cn Where cntable.Item("cln_idck") = cl Select (cntable.Item("cln_name")).ToString()
#do something
Next
我只是想获取客户端名称,并使用客户端代码搜索将其放入字符串变量clientname中。上面的代码给我一个错误。
“范围变量名称不能与“对象”类的成员名称匹配”
任何想法为什么这不起作用?
谢谢您的帮助!
拉斐尔
更新:
客户是具有客户代码的(字符串)列表
Dim clients As New List(Of String)
clients.Add("Cln1")
clients.Add("Cln2") #etc.
Select返回IEnumerable(Of T)(并且您正在使用DataTable的DataRows,因此将获得IEnumerable(Of DataRow)。
如果要在字段cln_name中获取字符串,则需要首先将查询结果转换为字符串枚举,然后具体化元素
For Each cl In clients
Dim clientname = (From cntable In t Where cntable.Item("cln_name") = cl
Select (cntable.Item("cln_name").ToString())).First()
Console.WriteLine(clientName)
Next
当然,这是基于这样的假设,即cl的每个元素在表中都有精确的匹配项。在这种情况下,您应该将First更改为FirstOrDefault并被告知您的clientName字符串可以为null(无)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句