-4

と呼ばれるdbテーブルからデータを取得しようとしています

部署

ID 名 ParentId

ドロップダウンリストに階層ビューを作成して部門を選択したいのですが、linq でデータを取得してドロップダウンリストにバインドしたいのですが、何か助けはありますか?

4

1 に答える 1

0

http://www.scip.be/index.php?Page=ArticlesNET18

私のために働いた

いい記事

GetEmployeesHierarchy()メソッド

私は最初に新しいEmployeeHierarchyクラスの作成を開始しました。このクラスには、従業員エンティティ(上司)と子従業員のコレクションが含まれます。

public class EmployeeHierarchy
{
  public Employee Employee { get; set; }
  public IEnumerable<EmployeeHierarchy> Employees { get; set; }
}

.NET 3.5では、LINQを自由に使用できます。そこで、ディレクター(誰にも報告する必要がない、ReportsTo = null)で開始し、彼のために働いているすべての従業員(ReportsTo ==ボスのEmployeeId)にクエリを実行する再帰的なGetEmployeesHierachy関数を作成しました。これは再帰的に繰り返されます。最後に、この関数は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;
}

この関数は、LINQtoSQLまたはLINQtoEntities(Entity Framework)クエリの後に呼び出すことができます。必ずToList()拡張メソッドを呼び出してください。最初にデータベースからすべてのデータをロードしてから、それを階層構造に変換する方がはるかにパフォーマンスが高くなります。ToList()メソッドを呼び出すことにより、データベースへのすべての参照が削除されます。

NorthWindDataContext dc = new NorthWindDataContext();

var employeesHierarchy = GetEmployeesHierachy(dc.Employees.AsEnumerable(), null);

treeViewEmployees.ItemsSource = employeesHierarchy;
于 2012-04-28T11:55:19.260 に答える