> > First, simply fetch the employees in full: > > var q = from e in ctx.Employees select e; > > Excellent description, Frans... one thing I like to point out is that > if you make your initial (flat) query from the database ordered by the > parent id and entry id, you get "in-order insertion" behavior when > building the tree, which makes everything faster: > > SELECT ManagerID, EmployeeID, Name > FROM Employee > ORDER BY ISNULL(ManagerID, 0), EmployeeID
No, that's not true. It's only true if employees at level n have all lower ID's than the employees at level n+1: managerID | EmployeeID | Name ----------------------------------- 0 | 20 | John D. Rockefeller 1 | 4 | Rick W. Annabee 1 | 6 | Al MostThere etc. :) So a sorting COULD give a better performance but the sorting should be taylored towards the ID distribution across the layers in the hierarchy. For example your sorting could have devastating results for performance in the situation where all managers have HIGHER ID values than their employees, as every row except the root will end up in the orphaned list ;) FB =================================== This list is hosted by DevelopMentor� http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com