【问题标题】:How to query a single value from a datatable using linq in vb.net如何在 vb.net 中使用 linq 从数据表中查询单个值
【发布时间】:2015-09-11 15:56:20
【问题描述】:

我正在尝试使用 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 中,使用客户端代码进行搜索。上面的代码给了我一个错误。

"范围变量名不能匹配"object"类的成员名"

任何想法为什么这不起作用?

感谢您的帮助!

拉斐尔

更新:

client 是一个包含客户代码的列表(字符串)

Dim clients As New List(Of String)
    clients.Add("Cln1")
    clients.Add("Cln2") #etc.

【问题讨论】:

  • 嗨,很抱歉没有澄清这一点。客户端是一个包含客户端代码的列表(字符串)。
  • 所以是最后的ToString 导致了问题。用括号括起来,它应该可以工作:Select ((cntable.Item("cln_name")).ToString())
  • @DavidG,我看到了那个帖子并尝试了你上面的代码,但它仍然给我一个错误,这次它说:'system.data.enumerablerowcollection(of string) cannot be convert to string'
  • @RafaelVelásquez 所以我链接的问题确实回答了你的问题,但现在你有另一个问题,史蒂夫已经为你整理了。

标签: vb.net linq


【解决方案1】:

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 字符串可能为空(无)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多