Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
建筑层次模型C#_C#_Entity Framework_Linq - Fatal编程技术网

建筑层次模型C#

建筑层次模型C#,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个层次模型: public class SearchHierarchyModel : { public string RowID { get; set; } public string Name { get; set; } public string Type { get; set; } public IEnumerable<SearchHierarchyModel> Children { get; set; } } 以下是我的助

我有一个层次模型:

public class SearchHierarchyModel : 
   {
    public string RowID { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public IEnumerable<SearchHierarchyModel> Children { get; set; }
   }
以下是我的助手对象:

 var Building = new SearchHierarchyModel();
 var Ground = new SearchHierarchyModel();
 var TopNode = new SearchHierarchyModel();
var GroundList = new List<SearchHierarchyModel>();
var Building=newsearchhierarchymodel();
var Ground=新的SearchHierarchyModel();
var TopNode=新的SearchHierarchyModel();
var GroundList=新列表();
这是假设填充层次结构的循环:

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();
        }
foreach(地面中的var gr)
{
var BuildingList=新列表();
foreach(建筑物内的var)
{
BuildingList.Add(新的SearchHierarchyModel
{
名称=按建筑,
Type=“BUI”,
RowID=by.Id.ToString()
});
foreach(楼层中的可变层)
{
if(by.Id==fl.Bygning\u Bygning\u Id)
{
var FloorList=新列表();
FloorList.Add(新的SearchHierarchyModel
{
名称=楼层,
Type=“FLR”,
RowID=fl.Id.ToString()
});
建筑。儿童=楼层列表;
}
}
Ground.Children=BuildingList;
}
TopNode.Children=GroundList;
}
返回TopNode.Children.ToList();
}

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

您正在将对象的新实例添加到临时列表中,然后将这些列表设置为唯一实例建筑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;
}
var TopNode=newsearchHierarchyModel();
var groundList=新列表();
foreach(地面中的var gr)
{
SearchHierarchyModel newGround=新的SearchHierarchyModel()
{
名称=gr.ground,
Type=“GRD”,
RowID=gr.Id.ToString()
};
地面列表。添加(新地面);
var buildingList=新列表();
foreach(建筑物内的var)
{
SearchHierarchyModel新建=新建SearchHierarchyModel()
{
名称=按建筑,
Type=“BUI”,
RowID=by.Id.ToString()
};
buildingList.Add(新建);
foreach(楼层中的可变层)
{
if(by.Id==fl.Bygning\u Bygning\u Id)
{
var floorList=新列表();
floorList.Add(新的SearchHierarchyModel
{
名称=楼层,
Type=“FLR”,
RowID=fl.Id.ToString()
});
新建。儿童=楼层列表;
}
}
newGround.Children=buildingList;
}
TopNode.Children=groundList;
}
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;
}