从IGrouping中选择属性列表

时间:2017-12-12 17:11:13

标签: asp.net vb.net linq

我按天数对一堆文件进行分组(确定文件何时退出)。 现在我想从分组中检索属性列表:

    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

2 个答案:

答案 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
相关问题