我正在尝试动态重组一些数据以显示在树视图中,这将允许用户选择以下维度中的最多三个来对数据进行分组:
Organisation
Company
Site
Division
Department
因此,例如,如果用户选择他们想按公司分组,然后按站点然后按部门...以下代码将执行所需的分组。
var entities = orgEntities
// Grouping Level 1
.GroupBy(o => new { o.CompanyID, o.CompanyName })
.Select(grp1 => new TreeViewItem
{
CompanyID = grp1.Key.CompanyID,
DisplayName = grp1.Key.CompanyName,
ItemTypeEnum = TreeViewItemType.Company,
SubItems = grp1
// Grouping Level 2
.GroupBy(o => new { o.SiteID, o.SiteName })
.Select(grp2 => new TreeViewItem
{
SiteID = grp2.Key.SiteID,
DisplayName = grp2.Key.SiteName,
ItemTypeEnum = TreeViewItemType.Site,
SubItems = grp2
// Grouping Level 3
.GroupBy(o => new { o.Division })
.Select(grp3 => new TreeViewItem
{
DisplayName = grp3.Key.Division,
ItemTypeEnum = TreeViewItemType.Division,
}).ToList()
}).ToList()
})
.ToList();
这将给出一个这样的结构:
+ Company A
+ Site A
+ Division 1
+ Division 2
+ Site B
+ Division 1
+ Company B
+ Site C
+ Division 2
+ Company C
+ Site D
但是,这只为我提供了大量组合中的一种。
我将如何将其转换为可以根据用户选择的三个维度动态创建等效表达式的东西,因此我不必为每个组合创建这些表达式中的每一个!!?
多谢你们。