我在数据表上有一个linq查询。我正在尝试计算我以前的linq查询。
Imports System.Data
Imports System.Linq
Sub TestThis()
Dim t As New testLinq
t.testLinqCount()
End Sub
Class testLinq
Sub testLinqCount()
'create new datatable
Dim myQbCustTable As New DataTable
For i As Integer = 1 To 5
Dim col As New DataColumn
myQbCustTable.Columns.Add(col)
Next
'add rows
For i As Integer = 1 To 5
Dim rw As DataRow = myQbCustTable.NewRow
rw.Item(1) = 1200 + i
myQbCustTable.Rows.Add(rw)
Next
'linq query
Dim CustBalQuery = From Cust In myQbCustTable _
Select CustomerID = Cust.Item(1), _
CustQBName = Cust.Item(2), _
CustBal = Cust.Item(3) _
Order By CustomerID
'get count
Dim ct As Integer = CustBalQuery.Count() '<error here
End Sub
End Class
你能告诉我如何获得CustBalQuery的数量吗?我尝试了CustBalQuery.Count()
并得到了这个错误:未找到类型'OrderedEnumerableRowCollection(VB $ AnonymousType_7(Of Object,Object,Object)')上的公共成员'Count'。
答案 0 :(得分:1)
我创建了一个虚拟类型,它按预期工作: -
Module Module1
Sub Main()
Dim fruits As New List(Of Fruits)
Dim fruit1 As New Fruits
fruit1.FruitID = 1
fruit1.FruitName = "Apple"
fruits.Add(fruit1)
Dim fruit2 As New Fruits
fruit2.FruitID = 2
fruit2.FruitName = "Banana"
fruits.Add(fruit2)
Dim fruit3 As New Fruits
fruit3.FruitID = 3
fruit3.FruitName = "Grapes"
fruits.Add(fruit3)
Dim query = From fruit In fruits
Select FruitID = fruit.FruitID, FruitName = fruit.FruitName
Order By FruitID
Dim queryCount As Integer = query.Count()
Console.WriteLine(queryCount) //Getting output as 3
End Sub
End Module
答案 1 :(得分:0)
我不确定如何解决它,但我发现我的问题归功于Jon Skeet的帮助。当我把代码放在一个新项目中时,它就可以立即运行。
'linq query
Dim CustBalQuery = From Cust In myQbCustTable _
Select CustomerID = Cust.Item(1), _
CustQBName = Cust.Item(2), _
CustBal = Cust.Item(3) _
Order By CustomerID
在我的旧项目CustBalQuery
中是一个“对象”类型。在我的新项目中,CustBalQuery
是OrderedEnumerableRowCollection(Of VB$AnonymousType_7(Of Object,Object,Object))
类型。
我不确定为什么会这样,但这就是CustBalQuery.Count()
在我的旧项目中不起作用的原因。
答案 2 :(得分:0)
选项推断需要开启。升级项目时,有时会在属性页面编译选项卡中将Option Infer关闭。当我设置Option Infer On时,问题就消失了。
Option Infer, A VB.NET compile option just for LINQ By Dan Mabbutt