.NET 4.x Сортировка и деревья - C#
Формулировка задачи:
Есть такой вот класс:
Читая из SQL табличку, получаю лист (снимок1)
А как теперь из этого сделать дерево? (снимок2)
public class FolderStructure
{
public String FolderTitle { get; set; }
public String Parent1 { get; set; }
public String Parent2 { get; set; }
public String Parent3 { get; set; }
public String Parent4 { get; set; }
public String Parent5 { get; set; }
public FolderStructure()
{
FolderTitle = "";
Parent1 = "";
Parent2 = "";
Parent3 = "";
Parent4 = "";
Parent5 = "";
}
public FolderStructure(string _parent1 = null, string _parent2 = null, string _parent3 = null, string _parent4 = null, string _parent5 = null )
{
Parent1 = string.IsNullOrEmpty(_parent1) ? string.Empty : _parent1;
Parent2 = string.IsNullOrEmpty(_parent2) ? string.Empty : _parent2;
Parent3 = string.IsNullOrEmpty(_parent3) ? string.Empty : _parent3;
Parent4 = string.IsNullOrEmpty(_parent4) ? string.Empty : _parent4;
Parent5 = string.IsNullOrEmpty(_parent5) ? string.Empty : _parent5;
}
}Решение задачи: «.NET 4.x Сортировка и деревья»
textual
Листинг программы
var kits1 = NewBase.Where(ee=>!string.IsNullOrEmpty(ee.Parent1)).Select(kit => kit.Parent1).Distinct().ToList();
for (int n = 0; n < kits1.Count; n++)
{
string current1 = kits1[n];
KitTreeModel tvr = new KitTreeModel()
{
DisplayText = current1,
Tag = new FolderStructure(_parent1: current1)
};
var kits2 = NewBase.Where(ee => ee.Parent1 == current1 && !string.IsNullOrEmpty(ee.Parent2)).Select(kit => kit.Parent2).Distinct().ToList();
for (int i = 0; i < kits2.Count; i++)
{
string current2 = kits2[i];
KitTreeModel tvr2 = new KitTreeModel()
{
DisplayText = current2,
Tag = new FolderStructure(_parent1: current1, _parent2: current2)
};
var kits3 = NewBase.Where(ee => ee.Parent1 == current1 && ee.Parent2==current2 && !string.IsNullOrEmpty(ee.Parent3)).Select(kit => kit.Parent3).Distinct().ToList();
for (int j = 0; j < kits3.Count; j++)
{
string current3 = kits3[j];
KitTreeModel tvr3 = new KitTreeModel()
{
DisplayText = current3,
Tag = new FolderStructure(_parent1: current1, _parent2: current2, _parent3: current3)
};
var kits4 = NewBase.Where(ee => ee.Parent1 == current1 && ee.Parent2 == current2 && ee.Parent3 == current3 && !string.IsNullOrEmpty(ee.Parent4)).Select(kit => kit.Parent4).Distinct().ToList();
for (int k = 0; k < kits4.Count; k++)
{
string current4 = kits4[k];
KitTreeModel tvr4 = new KitTreeModel()
{
DisplayText = current4,
Tag = new FolderStructure(_parent1: current1, _parent2: current2, _parent3: current3, _parent4: current4)
};
var kits5 = NewBase.Where(ee => ee.Parent1 == current1 && ee.Parent2 == current2 && ee.Parent3 == current3 && ee.Parent4 == current4 && !string.IsNullOrEmpty(ee.Parent5)).Select(kit => kit.Parent5).Distinct().ToList();
for (int l = 0; l < kits5.Count; l++)
{
string current5 = kits5[l];
KitTreeModel tvr5 = new KitTreeModel()
{
DisplayText = current5,
Tag = new FolderStructure(_parent1: current1, _parent2: current2, _parent3: current3, _parent4: current4, _parent5: current5)
};
tvr4.AddChild(tvr5);
}
tvr3.AddChild(tvr4);
}
tvr2.AddChild(tvr3);
}
tvr.AddChild(tvr2);
}
newTree.Add(tvr);
}