免责声明:从两天以来,我一直在与这个问题作斗争(我在SO上读过很多类似的问题)。通过Linq并寻求帮助。
我有一个<tr [pSelectableRow]="rowData">
<td *ngFor="let col of columns">
<ng-container *ngIf="(rowData[col.type] == 'Date'); else defaultTemplate;">
<span>{{rowData[col.field] | date:'dd/MM/yyyy'}}</span>
</ng-container>
<ng-template #defaultTemplate>
<span>{{rowData[col.field] }}</span>
</ng-template>
</td>
</tr>
的列表。每个Macrotab
对象都包含Macrotab
的列表。
每个Tab
对象内部都有Tab
。
Slot
*为了使问题易于阅读,我将填充一组示例数据的CreateHierarchaldata移动到.NetFiddle:https://dotnetfiddle.net/8mF1qI
以下几行使用Linq 展平此结构:
List<MacroTab> hierarchaldata = CreateHierarchaldata();
我尝试使用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();
回到原始列表。这是我的目标:汇总MacroTab,Tab和Slot的ID的数据并重新创建原始列表,但无法按预期工作**:
Linq Group By
**属性HelperClass仅用于调试目的,希望它不会引起混淆,我将其保留下来以解释Visual Studio调试器的屏幕截图
答案 0 :(得分:1)
var macroTabs = flattenedList
.GroupBy(x => x.IDMacroTab)
.Select((x) => new MacroTab
{
IDMacroTab = x.Key,
Tabs = x.GroupBy(t => t.IDTab)
.Select(tx => new Tab {
IDTab = tx.Key,
Slots = tx.Select(s => new Slot {
IDSlot = s.IDSlot
}).ToList()
}).ToList()
}).ToList();