2009-06-08 55 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