Как я использую Linq ToDictionary для возврата словаря с несколькими значениями в объектах словаря?

Я хочу сгруппировать объекты от запроса linq под заголовком, так, чтобы для каждого заголовка у меня был список объектов, которые соответствуют заголовку заголовка. Я предположил, что решение будет состоять в том, чтобы использовать ToDictionary для преобразования объектов, но это позволяет только один объект на "группу" (или ключ словаря). Я предположил, что мог создать словарь типа (Строка, Список ()), но я не могу выяснить, как записать это.

Как пример я записал упрощенную версию ниже.

Public Class order
    Public ID As Integer
    Public Name As String
    Public DateStamp As Date
End Class
Public Function GetOrdersSortedByDate() As Generic.Dictionary(Of String, Generic.List(Of User))
    Dim orders As New List(Of order)(New order() _
    {New order With _
     {.ID = 1, .Name = "Marble", .DateStamp = New Date(2010, 1, 1)}, _
     New order With _
     {.ID = 2, .Name = "Marble", .DateStamp = New Date(2010, 5, 1)}, _
     New order With _
     {.ID = 3, .Name = "Glass", .DateStamp = New Date(2010, 1, 1)}, _
     New order With _
     {.ID = 4, .Name = "Granite", .DateStamp = New Date(2010, 1, 1)}})

    ' Create a Dictionary that contains Package values, 
    ' using TrackingNumber as the key.
    Dim dict As Dictionary(Of String, List(Of order)) = _
        orders.ToDictionary(Of String, List(Of order))(Function(mykey) mykey.Name, AddressOf ConvertOrderToArray) ' Error on this line

    Return dict
End Function
Public Function ConvertOrderToArray(ByVal myVal As order, ByVal myList As Generic.List(Of order)) As Generic.List(Of order)
    If myList Is Nothing Then myList = New Generic.List(Of order)
    myList.Add(myVal)
    Return myList
End Function

Ошибка следующие

'Public Function ConvertOrderToArray(myVal As order, myList As System.Collections.Generic.List(Of order)) As System.Collections.Generic.List(Of order)'
does not have a signature compatible with delegate 
'Delegate Function Func(Of order, System.Collections.Generic.List(Of order))(arg As order) As System.Collections.Generic.List(Of order)'.

Что я делаю для вывода списка для каждого объекта словаря?

6
задан digiguru 25 January 2010 в 19:15
поделиться

2 ответа

вы можете сначала сгруппировать весь результат по имени, а затем вызвать словарь с групповым ключом как ключ

Я не знаю как это кодировать в VB, но как это будет выглядеть на C#

 Dictionary<string,List<Order>> dict = orders
  .GroupBy(x => x.Name)
  .ToDictionary(gr => gr.Key,gr=>gr.ToList() );
13
ответ дан 8 December 2019 в 13:46
поделиться

Вместо того, чтобы для того, чтобы для того, чтобы уточнить, вы хотите Tolookup . Просмотров будет хранить список значений для каждого ключа, поэтому ключ больше не требуется уникальным. Проссу, возвращаемый из этого метода, неизменно, хотя.

4
ответ дан 8 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: