문제

현재 ienumerable of type 탭을 계층 적 Tabnodes 모음으로 변환하는 확장 방법이 있습니다.

// If Tab has no parent its ParentId is -1

public class Tab
{
public int TabId { get; set; }
    public string TabName { get; set; }
    public int Level { get; set; }
    public int ParentId { get; set; }

}

public class TabNode
{
    public TabInfo Tab { get; set; }
    public IEnumerable<TabNode> ChildNodes { get; set; }
    public int Depth { get; set; }
}

예를 들어, 다음은 tabid 32를 가진 부모 아래에있는 tabnodes 컬렉션을 제공합니다 - 최대 깊이 수준은 4입니다.

IEnumerable<Tab> tabs = GetTabs();

IEnumerable<TabNode> = tabs.AsNavigationHierarchy(32,4);

이것은 혼란스럽고 추가 개선에 매우 친절하지 않습니다. 부모 대신 특정 레벨을 지정하려면 어떻게해야합니까?

내가하고 싶은 것은 다음과 같은 것입니다.

IEnumerable<TabNode> = tabs.AsNavigationHierarchy().WithStartLevel(2).WithMaxDepth(5)

나는 이것을 우아하게하는 방법으로 붙어 있습니다. 도와주세요?

이것은 내 확장 방법에 의해 호출되는 내 현재 함수입니다 (내가 찾은 기사를 기반으로 www.scip.be).

    private static IEnumerable<TabNode>
      CreateHierarchy(
        IEnumerable<TabInfo> tabs,
        int startTabId,
        int maxDepth,
        int depth)
    {
        IEnumerable<TabInfo> children;


            children = tabs.Where(i => i.ParentId.Equals(startTabId));


        if (children.Count() > 0)
        {
            depth++;

            if ((depth <= maxDepth) || (maxDepth == 0))
            {
                foreach (var childTab in children)
                    yield return
                      new TabNode()
                      {
                          Tab = childTab,
                          ChildNodes =
                            CreateHierarchy(tabs, childTab.TabID, maxDepth, depth),
                          Depth = depth
                      };
            }
        }
    }
도움이 되었습니까?

해결책

Tabs.asnavigationHeirachy는 다음 확장 방법이 기대할 수있는 Herirchyquery 객체를 반환 할 수 있습니다. 이것은 당신이 그들을 함께 사슬하게 할 수있게 해줄 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top