-4

我正在尝试从名为的 db 表中获取数据

部门

Id 名称 ParentId

我想在下拉列表中创建分层视图以在部门之间进行选择我想使用 linq 检索数据并将其绑定到下拉列表有什么帮助吗?

4

1 回答 1

0

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;
于 2012-04-28T11:55:19.260 回答