public IList <TreeModel> GetDisplayTreeNode(string key) { if (string.IsNullOrEmpty(key)) { return(null); } string[] keys = key.Split(','); var allTreeModels = GetAllTree().ToList(); KeyNode keyNode; IList <KeyNode> keyNodes = new List <KeyNode>(); //找出非根节点下的最深路径 foreach (var id in keys) { keyNode = new KeyNode { Deep = 0, ID = id }; var deepestTreeModel = allTreeModels.FirstOrDefault(m => m.ID == id); if (deepestTreeModel != null && deepestTreeModel.ParentID != "0") { FillDeepestData(deepestTreeModel, keyNode, allTreeModels); keyNodes.Add(keyNode); } } var resultKeyNodes = from kn in keyNodes group kn by kn.RootID into g select g.FirstOrDefault(p => p.Deep == g.Max(n => n.Deep)); var resultTreeModes = new List <TreeModel>(); foreach (var resultKeyNode in resultKeyNodes) { //填充从根节点到最深层之间的数据 FillFromRootToDeepestData(resultKeyNode.RootID, resultKeyNode.Deep, resultTreeModes, allTreeModels); //填充最深层的兄弟数据和自身 var currentTreeModel = allTreeModels.FirstOrDefault(m => m.ID == resultKeyNode.ID); if (currentTreeModel.ParentID != "0") { resultTreeModes.AddRange(allTreeModels.FindAll(m => m.ParentID == currentTreeModel.ParentID)); } } // 填充从根节点数据 foreach (var rootTreeModel in allTreeModels) { if (rootTreeModel.ParentID == "0") { resultTreeModes.Add(rootTreeModel); } } foreach (var resultTreeModel in resultTreeModes) { if (key.Contains(resultTreeModel.ID)) { resultTreeModel.IsSelected = true; } } return(resultTreeModes); }
private void FillDeepestData(TreeModel treeModel, KeyNode keyNode, IList <TreeModel> treeModels) { var preTreeModel = treeModels.FirstOrDefault(m => m.ID == treeModel.ParentID && m.ID != m.ParentID); //防止死循环 if (preTreeModel != null) { if (preTreeModel.ParentID == "0") { keyNode.RootID = preTreeModel.ID; } else { keyNode.Deep++; FillDeepestData(preTreeModel, keyNode, treeModels); } } }