private static IList <TreeingNode <T, TId> > LookupNodes <T, TId>(IEnumerable <T> items, TId parentId, int depthLevel = 0) where T : IParentIdentifier <TId> where TId : IEquatable <TId> { var nodes = new List <TreeingNode <T, TId> >(); // 提取父元素集合 var parents = items.Where(p => p.ParentId.Equals(parentId)); if (parents.IsEmpty()) { return(nodes); } foreach (var p in parents) { var node = new TreeingNode <T, TId>(p, depthLevel); var children = LookupNodes(items, p.Id, node.DepthLevel + 1); node.Children = children; nodes.Add(node); } return(nodes); }
public virtual bool Equals(TreeingNode <T, TId> other) { other.NotNull(nameof(other)); return(Id.Equals(other.Id) && ParentId.Equals(other.ParentId)); }
/// <summary> /// 是否包含指定标识的子节点。 /// </summary> /// <param name="childId">给定的子节点信号。</param> /// <param name="child">输出当前子节点。</param> /// <returns>返回布尔值。</returns> public virtual bool ContainsChild(TId childId, out TreeingNode <T, TId> child) { child = GetChild(childId); return(child.IsNotNull()); }