处理此方案的最佳方法是什么
foreach (var level1 in Levels.Where(l => l.PARENTID == 0))
{
// Print "LEVEL 1: Title"
foreach (var level2 in Levels.Where(l => l.PARENTID == level1.ROOTID))
{
// Print "Level 2: Sub Title"
foreach (var level3 in Levels.Where(l => l.PARENTID == level2.ROOTID))
{
// Print "Level 3: Header"
... etc ...
}
}
}
答案 0 :(得分:6)
我会使用递归
来做到这一点void ProcessLevels(IEnumerable<Level> levels, int parentID, int levelNum)
{
foreach (var subLevel in levels.Where(l => l.PARENTID == parentID))
{
//print Level levelNum
//use logic to format according to the specific level if desired
ProcessLevels(levels, subLevel.ROOTID, levelNum + 1);
}
}
您可以使用
调用它ProcessLevels(levels, 0, 1);
这样做的好处是,如果您的水平深度超过3深,它将继续处理链条。您还可以通过执行以下操作将其限制为3级(或您选择的任何级别):
void ProcessLevels(IEnumerable<Level> levels, int parentID, int levelNum, int levelsDeep)
{
foreach (var subLevel in levels.Where(l => l.PARENTID == parentID))
{
//print Level levelNum
//use logic to format according to the specific level if desired
if (levelsLeft > 0)
{
ProcessLevels(levels, subLevel.ROOTID, levelNum + 1, levelsDeep - 1);
}
}
}
拨打电话:
ProcessLevels(levels, 0, 1, 3);