如何使用vb.net中的linq从数据表中查询单个值

时间:2015-09-11 15:56:20

标签: vb.net linq

我尝试使用linq查询从vb中的数据中查询某个值,但是我遇到了一些错误。

这是我的代码:

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.

1 个答案:

答案 0 :(得分:0)

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