Я хочу сгруппировать объекты от запроса 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)'.
Что я делаю для вывода списка для каждого объекта словаря?
вы можете сначала сгруппировать весь результат по имени, а затем вызвать словарь с групповым ключом как ключ
Я не знаю как это кодировать в VB, но как это будет выглядеть на C#
Dictionary<string,List<Order>> dict = orders
.GroupBy(x => x.Name)
.ToDictionary(gr => gr.Key,gr=>gr.ToList() );
Вместо того, чтобы для того, чтобы для того, чтобы уточнить, вы хотите Tolookup . Просмотров будет хранить список значений для каждого ключа, поэтому ключ больше не требуется уникальным. Проссу, возвращаемый из этого метода, неизменно, хотя.