如果某个表应用了邻接模型(ID,ParentID),那么如何在Subsonic 3中返回层次结构?
答案 0 :(得分:2)
所有类都是部分类,因此为您的类创建一个新的部分(让我们说它是'类别)并创建子集合(称之为SubCategories)。然后,当您将对象加载到内存中时,可以加载子集合:
var allCategories=Categories.All().ToList();
allCategories.ForEach(x=>x.SubCategories=allCategories.Where(y=>y.CategoryID==x.ParentID));
这是自由的,但这就是主意。
答案 1 :(得分:1)
我一直都在使用它。只需阅读所有行。这就是你以后对行所做的事情。我将它们提供给一个DevExpress树控件,它自动选择ID和ParentID来显示树。或者通过几行递归,您可以遍历树并执行任何您喜欢的操作。
var result = from _db.Products中的p 选择p;
答案 2 :(得分:1)
这是我感谢Rob,但我想知道是否还需要递归函数?是否有LINQ替代方案?
var allCategories = Table_1.All().ToList();
allCategories.ForEach(x => x.Children = allCategories.Where(y => y.ParentID == x.ID));
var topLevel = allCategories.Where(f => f.ParentID == 0);
s.AppendLine("<ul>");
DoStuff(topLevel);
s.AppendLine("</ul>");
private void DoStuff(IEnumerable<Table_1> toplevel)
{
foreach (var lve in toplevel)
{
s.AppendLine("<li>"+lve.Title);
if (lve.Children.Count() > 0)
{
s.AppendLine("<ul>");
DoStuff(lve.Children);
s.AppendLine("</ul>");
}
s.AppendLine("</li>");
}
}