と呼ばれるdbテーブルからデータを取得しようとしています
部署
ID 名 ParentId
ドロップダウンリストに階層ビューを作成して部門を選択したいのですが、linq でデータを取得してドロップダウンリストにバインドしたいのですが、何か助けはありますか?
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;