我想知道这段代码是否足够好,或者是否有明显的新手禁忌。
基本上,我正在填充一个 TreeView,列出数据库中的所有部门。这是实体框架模型:
这是有问题的代码:
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);
}
}
}
EDIT:
到目前为止很好的建议。我想与整个系列一起工作是有意义的。但如果馆藏数量庞大(如 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);
}
}
既然您无论如何都会获取所有部门,为什么不在一个查询中执行此操作,在该查询中获取所有部门,然后针对内存中集合而不是数据库执行查询。那样效率会高很多。
从更一般的意义上来说,任何递归的数据库模型都可能导致问题,特别是如果这最终可能成为一个相当深的结构。需要考虑的一件可能的事情是,每个部门存储其所有祖先,以便您能够一次获取所有它们,而不必一次查询它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)