gpt4 book ai didi

c# - 更有效地构建树?

转载 作者:行者123 更新时间:2023-11-30 19:33:14 25 4
gpt4 key购买 nike

我想知道这段代码是否足够好,或者是否有明显的新手禁忌。

基本上,我正在填充一个 TreeView,列出我的数据库中的所有部门。这是 Entity Framework 模型:

alt text

这里是有问题的代码:

private void button1_Click(object sender, EventArgs e)
{
DepartmentRepository repo = new DepartmentRepository();
var parentDepartments = repo.FindAllDepartments()
.Where(d => d.IDParentDepartment == null)
.ToList();
foreach (var parent in parentDepartments)
{
TreeNode node = new TreeNode(parent.Name);
treeView1.Nodes.Add(node);

var children = repo.FindAllDepartments()
.Where(x => x.IDParentDepartment == parent.ID)
.ToList();
foreach (var child in children)
{
node.Nodes.Add(child.Name);
}
}
}

编辑:

目前为止的好建议。我想与整个系列一起工作是有道理的。但是,如果集合庞大到 200,000 个条目,会发生什么情况?这不会破坏我的软件吗?

DepartmentRepository repo = new DepartmentRepository();
var entries = repo.FindAllDepartments();

var parentDepartments = entries
.Where(d => d.IDParentDepartment == null)
.ToList();
foreach (var parent in parentDepartments)
{
TreeNode node = new TreeNode(parent.Name);
treeView1.Nodes.Add(node);

var children = entries.Where(x => x.IDParentDepartment == parent.ID)
.ToList();
foreach (var child in children)
{
node.Nodes.Add(child.Name);
}
}

最佳答案

既然您无论如何都要获取所有部门,为什么不在获取所有部门的一个查询中执行此操作,然后针对内存中的集合而不是数据库执行查询。这样效率会高得多。

从更一般的意义上讲,任何递归的数据库模型都可能导致问题,尤其是当这最终可能成为一个相当深的结构时。一个可能需要考虑的事情是让每个部门都存储它的所有祖先,这样您就可以一次获得它们,而不必一次查询它们。

关于c# - 更有效地构建树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4069193/

25 4 0
文章推荐: c - C 编程中如何从多行或不同行获取输入?
文章推荐: c# - NHibernate:从所有数据库表中获取所有数据
文章推荐: c - :( rejects "" minutes timed out while waiting for input to be rejected"shows when checking my proggram
文章推荐: javascript - 如何在 AngularJS Forms 的 `` 元素中改变 `