我按天数对一堆文件进行分组(确定文件何时退出)。 现在我想从分组中检索属性列表:
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,它认为d是一个Collection。我认为迭代分组会让我们自己访问元素,我错了吗?
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 :(得分: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
答案 1 :(得分: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