我想建立一个这样的树结构:
 root  Id 1
   child id 2
     grandChild  id 3
下面的代码示例。如果我使用GetChildrenNodesCorrect(),我会得到正确的结果。但是当GetChildrenNodesWrong()被使用时,它会返回如下:
root  Id 1
   child id 2
     Null
我知道这ToList()不是延迟执行,而是立即返回结果。谁能解释一下?    
 public class ToListTest
    {
       public static void Entry()
       {
           var toListTest = new ToListTest();
           toListTest.Test();
       }
       public void Test()
       {
           List<Node> newsList = new List<Node>
               {
                   new Node{Id = 1, ParentId = 0},
                   new Node{Id = 2, ParentId = 1},
                   new Node{Id = 3, ParentId = 2}
               };
          var root = BuildUpTree(newsList);
       }
        private TreeNode BuildUpTree(List<Node> newsList)
        {
            var root = new TreeNode { currentNode = newsList.First(n => n.ParentId == 0) };
            BuildUpTreeChildrenNodes(newsList, root);
            return root;
        }
        private void BuildUpTreeChildrenNodes(List<Node> newsList, TreeNode currentTreeNode)
        {
            currentTreeNode.Children = GetChildrenNodesWrong(newsList, currentTreeNode);
            foreach (var node in currentTreeNode.Children)
            {                
                BuildUpTreeChildrenNodes(newsList, node);    
            }
        }
        private  IEnumerable<TreeNode> GetChildrenNodesWrong(List<Node> newsList, TreeNode cuurentNode)
        {
            return newsList.Where(n => n.ParentId == cuurentNode.currentNode.Id)
                                .Select(n => new TreeNode
                                {
                                    currentNode = n
                                });
        }
        private IEnumerable<TreeNode> GetChildrenNodesCorrect(List<Node> newsList, TreeNode cuurentNode)
        {
            return GetChildrenNodesWrong(newsList, cuurentNode).ToList();
        }
       public class TreeNode
       {
           public Node currentNode { get; set; }
           public IEnumerable<TreeNode> Children { get; set; }
       }
       public class Node
       {
           public int Id { get; set; }
           public int ParentId { get; set; }
       }
    }
更新
在调试中,当使用GetChildrenNodesWrong(),root 时,方法返回之前既有子也有孙。方法返回后,root只有child,而grandchild为null。
更新 2
IMO,问题可能与干净的代码无关。但欢迎任何人展示更直观的代码。