正在构建层次结构模型C#

本文关键字:模型 层次结构 构建 | 更新日期: 2023-09-27 18:22:25

我有层次结构模型:

public class SearchHierarchyModel : 
   {
    public string RowID { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public IEnumerable<SearchHierarchyModel> Children { get; set; }
   }

假设由实体填充:

ground // entity list of grounds
building // entity list of buildings based on grounds ids
floors // entity list of floors based on building ids

这些我的助手对象:

 var Building = new SearchHierarchyModel();
 var Ground = new SearchHierarchyModel();
 var TopNode = new SearchHierarchyModel();
var GroundList = new List<SearchHierarchyModel>();

这是假设填充层次结构的循环:

foreach (var gr in ground)
            {
                var BuildingList = new List<SearchHierarchyModel>();
                foreach (var by in building)
                {
                    BuildingList.Add(new SearchHierarchyModel
                    {
                        Name = by.building,
                        Type = "BUI",
                        RowID = by.Id.ToString()
                    });
                    foreach (var fl in floors)
                    {
                        if (by.Id == fl.Bygning_Bygning_id)
                        {
                            var FloorList = new List<SearchHierarchyModel>();
                            FloorList.Add(new SearchHierarchyModel
                            {
                                Name = fl.floor,
                                Type = "FLR",
                                RowID = fl.Id.ToString()
                            });
                            Building.Children = FloorList;
                        }
                    }
                    Ground.Children = BuildingList;
                }
                TopNode.Children = GroundList;
            }
            return TopNode.Children.ToList();
        }

但这种层次结构的错误之处在于,顶层(地面)应该有两个子层(两栋建筑),而现在它是空的,而这一栋建筑应该有两个子层(楼层)。你知道那个循环怎么了吗?

正在构建层次结构模型C#

您正在将对象的新实例添加到临时列表中,然后将这些列表设置为Building,Ground e.t.c.的唯一实例的子实例

,你的循环中有一个巨大的指针混乱

如果我没有误解的话,下面是你应该执行的代码:

var TopNode = new SearchHierarchyModel();
var groundList = new List<SearchHierarchyModel>();
foreach (var gr in ground)
{
    SearchHierarchyModel newGround = new SearchHierarchyModel()
    {
        Name = gr.ground,
        Type = "GRD",
        RowID = gr.Id.ToString()
    };
    groundList.Add(newGround);
    var buildingList = new List<SearchHierarchyModel>();
    foreach (var by in building)
    {
        SearchHierarchyModel newBuilding = new SearchHierarchyModel()
        {
            Name = by.building,
            Type = "BUI",
            RowID = by.Id.ToString()
        };
        buildingList.Add(newBuilding);
        foreach (var fl in floors)
        {
            if (by.Id == fl.Bygning_Bygning_id)
            {
                var floorList = new List<SearchHierarchyModel>();
                floorList.Add(new SearchHierarchyModel
                {
                    Name = fl.floor,
                    Type = "FLR",
                    RowID = fl.Id.ToString()
                });
                newBuilding.Children = floorList;
            }
        }
        newGround.Children = buildingList;
    }
    TopNode.Children = groundList;
}