2017-12-14 11 views
0

私はデータベースからこの選択をC#のデータテーブルに取り込みます。 enter image description hereC#で再帰的な選択を取得するには?

DataTable cataloguess = catalogue.CatalogueChirMedTech(id); 

私はCategorieオブジェクトを持って、私はCategorie他Categorieオブジェクト(リスト)の下にあり、その下にすることができます。私は他のCategoriesオブジェクトなども持っています(再帰的)。 C#では、カテゴリのリストが存在する場合はそれぞれのカテゴリを作成したいと思います。そのモデルのモデルは、estterminal = 'o'の行です。 pereid = -256の行は親であり、その子はpereidを持つ行で、親(typeid)のIDです。

public class Categorie { 

    private List<Categorie> sousCategoriesField; 
    private List<Modele> modelesField; 


    public List<Categorie> Categories { 
     get { 
      return this.sousCategoriesField; 
     } 
     set { 
      this.sousCategoriesField = value; 
     } 
    } 


public List<typeModele> modeles { 
     get { 
      return this.modelesField; 
     } 
     set { 
      this.modelesField = value; 
     } 
    } 




} 

ありがとうございます。

+1

データベースがあるので、linqで処理するためにすべての行をアプリにプルしようとしているのはなぜですか?必要に応じて必要なデータを取得するのにSQLを使用しないのはなぜですか? –

+0

これはちょっと広いです、あなたは全く始まったのですか? 「親オブジェクト」と「データソース」をとり、その親オブジェクトの子を移入し、それらの子をループして再帰的に呼び出すメソッドを記述すると、再帰的な構造になります。 – David

答えて

0

最初あなたのCategorieオブジェクトに何らかの種類の識別子が必要と思われます。 再帰部分は十分に簡単であるべき

public int ID { get; set; } 

:のような単純なもの。あなたはもちろん、ここでプレースホルダGetCategoriesFromDataに展開する必要があると思い

private List<Categorie> GetCategories(int ID, DataTable sourceData) 
{ 
    var result = GetCategoriesFromData(ID, sourceData); 
    foreach (var categorie in result) 
     categorie.Categories = GetCategories(categorie.ID, sourceData); 
    return result; 
} 

:論理的方法は次のようになります。それは本当にあなた次第であり、再帰自体の範囲外です。基本的には、与えられたIDを親として持つ行についてはDataTableを照会し、それらの行をCategorieオブジェクトに変換してください(IDmodelesのいずれかを入力してください)。

しかし、いったんこの構造を持つと、再帰は簡単です。あなたがする必要があるのは最上位の親「カテゴリ」のためのあなたの最初の「マジックナンバー」でそれを呼び出している:

DataTable cataloguess = catalogue.CatalogueChirMedTech(id); 
var categories = GetCategories(-256, cataloguess); 

その後GetCategories方法は、再帰的にそれぞれのIDに沿って通過する、子カテゴリを移植します」各レベルの再帰で「親」となる。

+0

こんにちはDavid、私は再帰的メソッドの必要性を感じていますが、私はGetCategoriesFromDataメソッドが実行するものについては不明ではありませんでした。 – Hamza

+0

@HamzaElgarni:ここに示すコードのセマンティックプレースホルダです。実際の再帰とは無関係の操作を抽象化するためだけです。それは別の方法である必要はありません、あなたが好きな場合は、そのロジックをすぐそこで実行することができます。そのプレースホルダの目的は、ロジックのその時点で、与えられた 'ID'(データ内の' pereid')に基づいて 'DataTable'をクエリし、その結果を' Categorie 'オブジェクト型。 – David

関連する問題