2012-04-02 27 views
0

カテゴリとサブカテゴリの間にツリー構造を構築する必要があります。私は、関係を生成するためにハンドラを使用しています。カテゴリとサブカテゴリとそのサブカテゴリからのツリー構造の構築

例えば、私のSQLテーブルだからカテゴリがwhihそのthorughループがする再帰プログラムを使用して、このイムを行うには

 
toyota 
    prius 
    prius SP 
     prius PS blue 
    yaris 
    auris 

ford 
    focus 
    focus EX 
    mondeo 
    mustang 

など


のように見えます

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 
... 

含まれてい子カテゴリー。

しかし、ツリー構造を追加してaspxページに戻すにはどうすればよいですか。

私が使用しているコードは、この

のようにaspxページにJSONツリー構造を返すために、どのように

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

ある

</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

こんにちは私はそれがnullまたは1000に保つことができるように任意の違いを作ると思います。しかし、私は上記のJSON形式を出力するネストされた方法で子カテゴリのリストとその子を追加する際に苦労しています。 Imはその出力を得るのに苦労しています。ありがとう – user840491

+0

EFがID 1000の親を見つけようとすると意味があります。また、データベースの観点から、1000を置くと、参照整合性を利用できなくなり、FKを置くことができなくなります。そこ。オブジェクトモデルがある場合は、JSONシリアライザがそのジョブを行います。 – ivowiblo

関連する問題