Vb.net 如何使用Linq ToDictionary返回字典项中包含多个值的字典?

Vb.net 如何使用Linq ToDictionary返回字典项中包含多个值的字典?,vb.net,linq,delegates,todictionary,Vb.net,Linq,Delegates,Todictionary,我想将linq查询中的项目分组到一个标题下,这样每个标题都有一个与标题匹配的对象列表。我假设解决方案是使用ToDictionary来转换对象,但这只允许每个“组”(或字典键)有一个对象。我假设我可以创建类型为(String,List of())的字典,但我不知道如何编写它 作为一个例子,我在下面写了一个简化的版本 Public Class order Public ID As Integer Public Name As String Public DateStamp A

我想将linq查询中的项目分组到一个标题下,这样每个标题都有一个与标题匹配的对象列表。我假设解决方案是使用ToDictionary来转换对象,但这只允许每个“组”(或字典键)有一个对象。我假设我可以创建类型为(String,List of())的字典,但我不知道如何编写它

作为一个例子,我在下面写了一个简化的版本

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)'.

如何为每个字典项输出一个列表?

您可以首先按名称对所有结果进行分组,然后使用组键作为键调用dictionnary

我不知道如何在VB中编写它,但它在C中会是什么样子#

Dictionary dict=订单
.GroupBy(x=>x.Name)
.ToDictionary(gr=>gr.Key,gr=>gr.ToList());

您需要的不是编辑。查找将存储每个键的值列表,因此不再要求该键是唯一的。但是,此方法返回的查找是不可变的。

Dim f=d.GroupBy(函数(x)x.PoolName)。ToDictionary(函数(t)t.Key,函数(g)g.ToList())-我来试试!我们的想法是每个键都有多个项,因此我们的目的是使其具有唯一性。查找是可枚举的吗?是的,它是文档中提到的组上的枚举:它与公认的解决方案完全相同,但它是一个内置函数:orders.ToLookup(x=>x.Name,x=>x);
 Dictionary<string,List<Order>> dict = orders
  .GroupBy(x => x.Name)
  .ToDictionary(gr => gr.Key,gr=>gr.ToList() );