我正在尝试从名为的 db 表中获取数据
部门
Id 名称 ParentId
我想在下拉列表中创建分层视图以在部门之间进行选择我想使用 linq 检索数据并将其绑定到下拉列表有什么帮助吗?
http://www.scip.be/index.php?Page=ArticlesNET18
为我工作
好文章
GetEmployeesHierarchy() 方法
我首先开始创建一个新的 EmployeeHierarchy 类。此类包含一个 Employee 实体(老板)和一组子雇员。
public class EmployeeHierarchy
{
public Employee Employee { get; set; }
public IEnumerable<EmployeeHierarchy> Employees { get; set; }
}
在 .NET 3.5 中,我们可以使用 LINQ。因此,我创建了一个递归 GetEmployeesHierachy 函数,该函数将从主管(不必向任何人报告,ReportsTo = null)开始并查询为他工作的所有员工(ReportsTo == 老板的 EmployeeId)。这将递归地重复。最后,此函数将返回 EmployeeHierarchy 对象的集合。
public IEnumerable<EmployeeHierarchy> GetEmployeesHierachy(IEnumerable<Employee> allEmployees, Employee parentEmployee)
{
int? parentEmployeeId = null;
if (parentEmployee != null)
parentEmployeeId = parentEmployee.EmployeeID;
var childEmployees = allEmployees.Where(e => e.ReportsTo == parentEmployeeId);
Collection<EmployeeHierarchy> hierarchy = new Collection<EmployeeHierarchy>();
foreach (var emp in childEmployees)
hierarchy.Add(new EmployeeHierarchy() { Employee = emp, Employees = GetEmployeesHierachy(allEmployees, emp) });
return hierarchy;
}
可以在 LINQ to SQL 或 LINQ to Entities(实体框架)查询之后调用此函数。确保调用 ToList() 扩展方法。首先从数据库中加载所有数据,然后将其转换为层次结构,这样的性能要高得多。通过调用 ToList() 方法,所有对数据库的引用都将被删除。
NorthWindDataContext dc = new NorthWindDataContext();
var employeesHierarchy = GetEmployeesHierachy(dc.Employees.AsEnumerable(), null);
treeViewEmployees.ItemsSource = employeesHierarchy;