在数据表上使用linq时出错

时间:2014-04-03 14:52:13

标签: vb.net ms-access

我正在尝试运行以下代码将我的数据表转换为可以在linq中使用所有似乎罚款和编译但是当我执行语句时我得到以下语句我得到以下错误新的entires只有位置和ordernumber在返回我必须这样做,因为我支持传统的访问97系统,谢谢。

 Dim total = From row In newEntries.AsEnumerable()
            Select row.Field(Of Int32)("location") Distinct
    retVal = Convert.ToInt32(total)

enter image description here

这是我的整个代码,但我仍然得到一个无效的类型转换错误,他们是这个订单的数据exsits teh方式

        Dim retVal As Int32
       Dim newEntries As New DataTable
     Dim script As String = scriptBuilder.GetDistinctOrdersForLocations(OrderNumber)
    newEntries = connection.SqlSelectToDataTable(script)
    Dim total = From row In newEntries.AsEnumerable()
            Select row.Field(Of Int32)("location") Distinct
    retVal = total.Count()

4 个答案:

答案 0 :(得分:3)

如果您想要收集的计数,请执行以下操作:

retVal = total.Count()

这将返回您编写的不同查询的计数。

为了澄清,@ David B确定位置的数据类型是int16而不是int32,因此在linq查询中更改此问题解决了问题。

答案 1 :(得分:0)

您的LINQ查询正在返回一个集合。您应该使用FirstFirstOrDefault之类的内容。

我在VB LINQ上有点生疏,但试试:

retVal = Convert.ToInt32(total.First())

注意:如果集合中没有项目,则会抛出错误。

答案 2 :(得分:0)

了解何时编写LINQ查询并将其分配给变量非常重要,该变量实际上包含查询对象 的结果正在运行查询。为了获得查询产生的值,您需要在查询对象上调用一些方法,例如:

total.Single() ' Assumes you expect the query to return exactly one result.

答案 3 :(得分:0)

我将代码更改为int16,这里的代码是任何其他人感谢@Ric

的代码
    Dim retVal As Int32
    Dim newEntries As New DataTable
     Dim script As String = scriptBuilder.GetDistinctOrdersForLocations(OrderNumber)
    newEntries = connection.SqlSelectToDataTable(script)
    Dim total = From row In newEntries.AsEnumerable()
            Select row.Field(Of Int16)("location") Distinct
    retVal = total.Count()