从类别和子类别及其子类别构建树结构

时间:2012-04-02 16:02:30

标签: c#

我需要在类别和子类别之间开发树结构。我正在使用处理程序来生成关系。

例如我的SQL表包含

GlobalID for top-level parents 1000

Id      CategoryName          ParentId
 1        toyota               1000
 2        ford                 1000  
 5        prius                 1
 6        prius SP              5
 7        prius SP blue         6
 8        focus                 2
 9        mondeo                2 
 10       mustang               2
 11       focus EX              8
 ...

所以类别看起来像

toyota 
   prius
     prius SP
       prius PS blue
  yaris
  auris

ford
  focus
    focus EX
  mondeo
  mustang


要做到这一点,我使用一个递归程序,它将循环其子类别。

但是如何添加树结构并将其发送回aspx页面。

我正在使用的代码是

// To get all the parent categories

List<Category> objChildren = new List<Category>();

public List<Category> GetCategories(int categoryId)
{   
  IQueryable<Category> cats = from ca in db.Categories
                              where ca.ParentId == categoryId && ca.ParentId != nonPageId
                              select ca;

  return cats.ToList();
}

List<Category> parentCategories = GetCategories(1000);
foreach(Category _category in parentCategories)
{
  GetChildCats(_category);
}

public void GetChildCats(Category cat)
{
  objChildren.Add(cat);

  List<Category> cats = GetCategories(cat.CatId); 

  if (cats.Count != 0)
  { 
    foreach (Category cate in cats)
    {              
      GetChildCats(cate);               
    }
  }
}

如何将JSON树结构返回到aspx页面,如下所示

</pre>
So the categories looks like
<pre>
[0] => toyota 
        [0] => prius
                [0] => prius SP
                         [0] => prius PS blue
        [1] => yaris
        [2] => auris

[1] => ford
        [0] => focus
                 [0] => focus EX
        [1] => mondeo
        [2] => mustang
</pre>

1 个答案:

答案 0 :(得分:0)

你可以做的是代替使用1000使用null。这意味着该类别没有父级(而不是Id = 1000的父级)。

然后,映射关系(Category Parent和IList Children),您将能够执行此操作:

var parents = db.Categories.Where(x => x.Parent == null);

并且类别本身将是您想要的树结构,您将能够使用任何JSON序列化器。