2014-10-20 103 views
0

我在数据表上有一个linq查询。我试图获得我以前的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(Of VB,AnonymousType_7(Of Object,Object,Object)')类型的公共成员'Count'。

+1

总结客户ID对我来说看起来很奇怪。我期望'CustBalQuery.Count()'是你想要的... – 2014-10-20 07:21:30

+0

@JonSkeet请参阅编辑后的错误消息 – 2014-10-20 07:31:43

+1

你有没有导入System.Linq?请注意,我建议Count()而不是计数...它可能不会给与VB的隐式括号和不区分大小写的差异,但我仍然尝试以我建议的方式... – 2014-10-20 07:43:58

回答

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 
0

我还没有确定如何修复它,但我发现我感谢乔恩斯基特的帮助的问题。当我将代码放入一个新项目中时,它立即可用。

'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()不适用于我的旧项目。