【发布时间】:2019-03-15 15:48:07
【问题描述】:
免责声明: 2 天以来我一直在与这个问题作斗争(我已经阅读了很多关于 SO 的类似问题).. 所以请耐心等待,我错过了有关小组的一些内容通过使用 Linq 并寻求帮助。
类结构
填充样本数据
我有一个Macrotab 的列表。每个Macrotab 对象都包含一个Tab 列表。
每个 Tab 对象都在里面,Slot 在里面。
List<MacroTab> hierarchaldata = CreateHierarchaldata();
*为了使问题易于阅读,我已将填充一组示例数据的 CreateHierarchaldata 移至 .NetFiddle:https://dotnetfiddle.net/8mF1qI
扁平化
以下几行使用 Linq 扁平化此结构:
var flattenedList = (from macroTab in hierarchaldata
from tab in macroTab.Tabs
from slot in tab.Slots
select new {macroTab.IDMacroTab, tab.IDTab, slot.IDSlot}).ToList();
将数据聚合回层次结构
我尝试使用Linq Group By回到原来的列表。这是我的目标:聚合 MacroTab、选项卡和插槽的 Id 的数据并重新创建原始列表,但它没有按预期工作**:
var antiflatten = from macrotab in flattenedList
group macrotab by new {macrotab.IDMacroTab}
into macrotabs
let macrotabFirst = macrotabs.First()
select new MacroTab
{
IDMacroTab = macrotabFirst.IDMacroTab,
Tabs = (from macrotab in macrotabs
group macrotabs by new {macrotab.IDTab}
into tabs
let tabFirst = tabs.First()
select new Tab(){ HelperClass = tabFirst}).ToList()
};
**HelperClass 属性仅用于调试目的,希望不要混淆,我留下来解释 Visual Studio 调试器的截图
【问题讨论】:
标签: c# linq hierarchical-data flatten