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);
        }
示例#2
0
 public virtual bool Equals(TreeingNode <T, TId> other)
 {
     other.NotNull(nameof(other));
     return(Id.Equals(other.Id) && ParentId.Equals(other.ParentId));
 }
示例#3
0
 /// <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());
 }