免责声明:
我已经和这个问题斗争了两天了(我在网上读了很多类似的问题)。。所以耐心点,我错过了一些关于Linq和寻求帮助的小组。
阶级结构
我有一份
Macrotab
宏表
对象包含
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
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()
};
Try it on Fiddler