亚音速3和邻接模型

时间:2009-06-08 14:04:19

标签: linq subsonic

如果某个表应用了邻接模型(ID,ParentID),那么如何在Subsonic 3中返回层次结构?

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>");
            }
        }