2011-08-02 9 views
0

以下のコードを記述します。私はそれがばかだと知っています。 linqの数を使って短くしたい。 私に光を与えてください。vb.netデータテーブルでLinqカウント関数を使用する

  Dim query0 = From obj In dtAginglist _ 
         Where (obj.Field(Of String)("CurrentStatus") = "Open" Or obj.Field(Of String)("CurrentStatus") = "Acknowledge") _ 
          And obj.Field(Of Integer)("OpenDays") = 0 
      Dim count0 As Integer = query0.Count 

      Dim query1 = From obj In dtAginglist _ 
         Where (obj.Field(Of String)("CurrentStatus") = "Open" Or obj.Field(Of String)("CurrentStatus") = "Acknowledge") _ 
          And obj.Field(Of Integer)("OpenDays") = 1 
      Dim count1 As Integer = query1.Count 

      Dim query2 = From obj In dtAginglist _ 
         Where (obj.Field(Of String)("CurrentStatus") = "Open" Or obj.Field(Of String)("CurrentStatus") = "Acknowledge") _ 
          And obj.Field(Of Integer)("OpenDays") = 1 
      Dim count2 As Integer = query2.Count 


      Dim query3 = From obj In dtAginglist _ 
         Where (obj.Field(Of String)("CurrentStatus") = "Open" Or obj.Field(Of String)("CurrentStatus") = "Acknowledge") _ 
          And obj.Field(Of Integer)("OpenDays") = 3 
      Dim count3 As Integer = query3.Count 

      Dim query4 = From obj In dtAginglist _ 
         Where (obj.Field(Of String)("CurrentStatus") = "Open" Or obj.Field(Of String)("CurrentStatus") = "Acknowledge") _ 
          And obj.Field(Of Integer)("OpenDays") = 4 
      Dim count4 As Integer = query4.Count 

      Dim query5 = From obj In dtAginglist _ 
         Where (obj.Field(Of String)("CurrentStatus") = "Open" Or obj.Field(Of String)("CurrentStatus") = "Acknowledge") _ 
          And obj.Field(Of Integer)("OpenDays") = 5 
      Dim count5 As Integer = query5.Count 

      Dim queryOver6 = From obj In dtAginglist _ 
         Where (obj.Field(Of String)("CurrentStatus") = "Open" Or obj.Field(Of String)("CurrentStatus") = "Acknowledge") _ 
          And obj.Field(Of Integer)("OpenDays") > 5 
      Dim countOver6 As Integer = queryOver6.Count 

      Dim Result As String 
      Result = String.Format("0 Day : {1}{0}1 Day :{2}{0}2 Days :{3}{0}3 Days :{3}{0}4 Days :{5}{0}5 Days :{6}{0}Over 6 Days :{7}{0}", _ 
            vbCrLf, count0, count1, count2, count3, count4, count5) 

私は以下のコードを使用しようとしていますが、ソースがdatatableの場合は動作しません。

Dim orderCounts = From c In customers New With { _ 
    c.CustomerID, Key .OrderCount = c.Orders.Count() } 

答えて

1

私はあなたがこれを行うにはAsQueryable()拡張機能を使用する必要があると考えている:

Dim orderCounts = From c In customers.AsQueryable() 
        New With 
        { 
         c.CustomerID, 
         Key.OrderCount = c.Orders.Count() 
        } 

あなたにもインポートSystem.Data.DataSetExtensionsを追加する必要があります。

この理由は、DataTableの行コレクションがIEnumerableを実装していないためです。 LINQ query on a DataTable

関連する問題