Chcę grupować elementy z zapytania linq pod nagłówkiem, tak aby dla każdego nagłówka miałem listę obiektów, które pasują do tytułu nagłówka. Zakładałem, że rozwiązaniem będzie użycie ToDictionary do konwersji obiektów, ale to pozwala tylko na jeden obiekt na "grupę" (lub klucz słownikowy). Zakładałem, że mogę utworzyć słownik typu (String, List Of()), ale nie mogę wymyślić, jak to napisać.Jak używać Linq ToDictionary do zwracania słownika z wieloma wartościami w elementach słownika?
Jako przykład poniżej napisałem uproszczoną wersję.
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
Błąd jest następujący
'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)'.
co mam zrobić do wyprowadzenia listy dla każdej pozycji słowniku?
Dim f = d.GroupBy (Funkcja (x) x.PlacName) .ToDictionary (funkcja (t) t.Key, funkcja (g) g.ToList()) - Odpalę! – digiguru
To zadziałało jak marzenie, dzięki – digiguru