2009-06-08 61 views

回答

2

所有的类都是partials,所以为你的类创建一个新的部分(假设它是'Category')并创建子集合(称之为SubCategories)。然后,当您将对象加载到内存中时,您可以加载子集合:

var allCategories=Categories.All().ToList(); 
allCategories.ForEach(x=>x.SubCategories=allCategories.Where(y=>y.CategoryID==x.ParentID)); 

这是免费的,但这就是主意。

+0

对我的问题上述我的问题上述任何想法? – Jon 2009-06-09 13:16:53

+0

就像我提到的 - 创建一个单独的类,并通过一个单独的方法访问“结构化”位 - 可能像“GetItemHierarchy”,而不是调用SubSonic核心方法。 – 2009-06-09 19:08:50

+0

即使我创建了一个名为GetItemHeirarchy的方法,我仍然只是将上面的代码放在里面。使用核心All()方法的问题是什么,因为我需要返回所有记录来填充Children集合? – Jon 2009-06-09 20:03:47

1

我一直都在使用它。只要阅读所有的行。这就是你在后面的行中所做的事情。我将它们提供给DevExpress树形控件,该控件自动挑选ID和ParentID来显示树。或者用几行递归,你可以遍历树并做任何你喜欢的事情。

var result = from _db.Products select p;

1

这是我感谢罗布,但我不知道递归函数是否仍然需要?有没有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>"); 
      } 
     } 
+0

我建议为此创建一个新问题,您可能会得到更多答案 – 2009-06-10 10:02:09

+0

如果您想使用函数或SP,您*可以*在SQL Server中执行此操作: http://blog.wekeroad.com/ blog/Cursed-Recursiveness-Querying-a-Recursive-Join/ – 2009-06-10 19:01:26

+0

我会坚持我的解决方案我认为 – Jon 2009-06-11 08:46:08