2017-12-12 12 views
1

私は数多くのドキュメントを#日でグループ化しています(ファイルがいつ出るかを決定します)。 そして今、私はグループからのプロパティのリストを取得したい:それはdがコレクションであることを考えて、IGroupingからプロパティのリストを選択してください

Dim agencyDocumentBatches As List(Of AgencyDocumentBatch) = _agencyDocumentBatchesData.ExecuteQuery(queryParameter, _context.DatabaseName) 

    Dim documentBatchesGroupedByDay As IEnumerable(Of IGrouping(Of Integer, List(Of AgencyDocumentBatch))) = 
      agencyDocumentBatches.GroupBy(Function(d) d.Days) 

    For Each documentBatchGroup As IGrouping(Of Integer, List(Of AgencyDocumentBatch)) In documentBatchesGroupedByDay 

    Dim addBookingDocumentsParams As New AddBookingDocumentsParams() With 
    { 
     .BCode = bCode, 
     .DueDate = quote.DepartureDate.AddDays(-documentBatchGroup.Key),  'Key = Days before/after departure 
     .Documents = documentBatchGroup.Select(Function(d) d.DocumentName).ToList 
    } 
    _documentDatesData.ExecuteQuery(addBookingDocumentsParams, _context.DatabaseName) 
    Next 

しかし、私はd.DocumentNameがそこに定義されていないことがわかります。私はGroupingを繰り返して、要素自体にアクセスできると思いましたが、間違っていますか?

Public Class AgencyDocumentBatch 

     Public Property ID As Integer 

     Public Property DocumentID As Integer 

     Public Property Days As Integer 

     Public Property AfterDeparture As Boolean 

     Public Property DocumentName As String 

    End Class 
+0

をそして、何これを行うにはコードは?無駄にオブジェクトを作成する? – JohnyL

+0

addBookingDocumentsParamsを別のメソッドに送信して処理します。更新されたコードですが、それは問題の外にあります。 – FailedUnitTest

+0

最初の引数はkeyなので、Daysはキーである必要があります(おそらく、LINQクエリでそう呼ばれていたはずです)。 – JohnyL

答えて

1

ここで、私は願って、(いくつかのプロパティを省略している)何が必要であるシミュレーションです:

Module Module1 

    Sub Main() 

     Dim list = New List(Of AgencyDocumentBatch) From { 
      New AgencyDocumentBatch With {.Days = 1, .DocumentName = "Doc1"}, 
      New AgencyDocumentBatch With {.Days = 2, .DocumentName = "Doc2"}, 
      New AgencyDocumentBatch With {.Days = 1, .DocumentName = "Doc3"}, 
      New AgencyDocumentBatch With {.Days = 2, .DocumentName = "Doc4"} 
     } 

     Dim documentBatchesGroupedByDay = From l In list 
              Group l By l.Days Into Group 

     For Each doc In documentBatchesGroupedByDay 
      Dim proxy = New AddBookingDocumentsParams With 
      { 
       .Documents = doc.Group.Select(Function(a) a.DocumentName).ToList() 
      } 
     Next 

    End Sub 

End Module 


Class AddBookingDocumentsParams 
    Property Documents As List(Of String) 
End Class 

Public Class AgencyDocumentBatch 
    Public Property Days As Integer 
    Public Property DocumentName As String 
End Class 
+0

doc.Groupとは何ですか? – FailedUnitTest

+0

これはグループの鍵です。あなたは別名を付けることができます: 'Group l l.Days.Do Into Docs = Group'。コードでは、 '.Documents = doc.Docs.Select(...)'を使うべきです。 – JohnyL

+0

私も解決策がありますが、あなたのものが最初です。良いアプローチも。 – FailedUnitTest

0

私はエイリアシングのない別の解決策が見つかりました:

For Each documentBatchGroup As IGrouping(Of Integer, List(Of AgencyDocumentBatch)) In documentBatchesGroupedByDay 

     Dim addBookingDocumentsParams As New AddBookingDocumentsParams() With 
     { 
      .BCode = bCode, 
      .DueDate = quote.DepartureDate.AddDays(-documentBatchGroup.Key),  'Key = Days before/after departure 
      .Documents = documentBatchGroup(documentBatchGroup.Key).Select(Function(d) d.DocumentName).ToList 
     } 
     _documentDatesData.ExecuteQuery(addBookingDocumentsParams, _context.DatabaseName) 

     Next 
関連する問題