واجهات أساليب بطلاقة / تمديد - تحويل قائمة كاملة إلى شجرة الملاحة

StackOverflow https://stackoverflow.com/questions/807449

سؤال

ولدي حاليا على طريقة تمديد والذي يحول إلى IEnumerable من نوع تبويب إلى مجموعة هرمية من 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; }
}

وعلى سبيل المثال، فإن ما يلي تعطيك مجموعة من TabNodes الذين هم أقل من أحد الوالدين مع ذابل 32 - الحد الأقصى لمستوى عمق 4

IEnumerable<Tab> tabs = GetTabs();

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

وهذا هو مربكة وغير ودية للغاية لمزيد من الصقل. ما إذا كنت ترغب في تحديد مستوى معين بدلا من ParentID؟

ما أود القيام به هو شيء من هذا القبيل:

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

وأنا عالقة عن كيفية القيام بذلك بأناقة. هل تستطيع مساعدتي؟

وهذه هي وظيفتي الحالية وهو ما يسمى بالطرق إضافتي (على أساس المادة لقد وجدت على <لأ href = "http://www.scip.be/index.php؟Page=ArticlesNET23&Lang=EN" يختلط = "نوفولو noreferrer"> 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