2012-04-02 89 views
0

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

例如我的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 


要使用递归程序whih将循环thorugh做进出口公司儿童类别。

但是如何添加树结构并将其发送回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> 

回答

0

你可以做的是,而不是使用1000使用空。这将意味着该类别没有父母(而不是Id = 1000的父母)。

然后,映射关系(范畴家长和IList的儿童),你就可以做到这一点:

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

和类别自理会是你想要的树状结构,你将能够使用任何JSON序列化器。

+0

嗨我认为父母身份没有任何区别,因为它可以保留为空或1000.但Im努力在添加子类别列表及其子以嵌套方式输出上述JSON格式。我努力获得那个输出。谢谢 – user840491 2012-04-02 16:45:51

+0

当EF尝试使用Id 1000查找父项时,它是有意义的。同样从数据库的角度来看,如果您放入1000,您将无法使用参考完整性,您将无法将FK那里。如果你有对象模型,那么任何JSON序列化器都可以完成这项工作。 – ivowiblo 2012-04-03 12:29:30