public void CreateTree() { var bar0 = new Bar(1, null); var bar1 = new Bar(2, null); var bar0_0 = new Bar(3, 1); var bar0_1 = new Bar(4, 1); var bar_0_0_0 = new Bar(5, 3); var list = new List <Bar>() { bar0, bar1, bar0_0, bar0_1, bar_0_0_0 }; //Create the tree var tree = TreeExtensions.CreateTree(list.Where(b => b.ParentId == null), list, (p, c) => c.ParentId != null && c.ParentId.Value == p.Id); Assert.Same(bar0, tree.Nodes[0].Item); Assert.Same(bar1, tree.Nodes[1].Item); Assert.Same(bar0_1, tree.Nodes[0].Nodes[1].Item); }