LINQ基于分组填充树视图

我在SO上找到了这个C#答案,但似乎无法实现这一点: c#从LINQ对象填充树视图

在我的例子中,假设我有一个List(Of Report_Data) ,例如,它看起来像这样:

 Var1 Var2 V1 Sub Item 1 V1 Sub Item 2 V1 Sub Item 3 V2 Sub Item 1 V2 Sub Item 2 V3 Sub Item 1 

而且我希望使用LINQ来填充树视图,如下所示:

 V1 (CheckBox) -------Sub Item 1 (CheckBox) -------Sub Item 2 (CheckBox) -------Sub Item 3 (CheckBox) V2 (CheckBox) -------Sub Item 1 (CheckBox) -------Sub Item 2 (CheckBox) V3 (CheckBox) -------Sub Item 1 (CheckBox) 

因此,在我的Treeview填充例程中,我创建了以下内存中查询:

  Dim GroupedReports = From Rpt As Report_Data In ReportsToBeProcessed Group Rpt By Rpt.Var1 Into Group 

然后我想我可以遍历组,然后循环分组的对象来填充树视图 – 类似于以下内容:

  For Each Grp As Object In GroupedReports ... Add Parent node ... For Each Rpt As Report_Data In Grp ... Add Child Node ... Next Next 

首先,我不知道我的Grp变量使用什么数据类型,其次它似乎没有工作……
我该怎么做呢?

这是什么意思,你的意思是?

(对不起,再也不写VB了,所以我能做的最好就是C#)

 var grped = from report in reports group report by report.Var1 into grp select grp; var treeView = new System.Windows.Forms.TreeView(); foreach(var grouping in grped) { var nodeFor = treeView.Nodes.Add(grouping.Key); foreach(var item in grouping) { var subitem = nodeFor.Nodes.Add(item.Var2); } } 

编辑:“group by”构造返回一组IGrouping – 您可以将其视为键值对,键是您分组的对象,值是所有元素匹配那把钥匙。

这是我相信的VB.Net代码:

 Dim grped = From report In reports Group report By report.Var1 into grp Select grp Dim treeView as New System.Windows.Forms.TreeView() For Each grouping In grped Dim nodeFor = treeView.Nodes.Add(grouping.Key) For Each item In grouping Dim subitem = nodeFor.Nodes.Add(item.Var2) Next Next