واجهات أساليب بطلاقة / تمديد - تحويل قائمة كاملة إلى شجرة الملاحة
-
03-07-2019 - |
سؤال
ولدي حاليا على طريقة تمديد والذي يحول إلى 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 التي تتوقع أساليب الإرشاد الخاص بك المقبل ثم. هذا سوف تتيح لك سلسلة لبعضهم البعض.