2016-08-16 6 views
0

私は、バックエンド用にASP.NET Web API 2を、フロントエンド用にAngularJSを使用しています。 AngularJSにツリービューを表示したいASP.NET Web APIでネストされたツリーを構築する方法

私はASP Web APIにネストされたモデルが必要です。モデルは、現在、次のようになります。

public class Register 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public List<Register> Children { get; set; } 
} 

と、このようなコントローラ:

DBExample

JSON出力ショー:

私は例を、以下の追加私のデータベースで

// GET: api/Registers 
    public IQueryable<Register> GetRegister() 
    { 
     return db.Register; 
    } 

[{"ID":4,"Name":"RootFolder","Children":[{"ID":5,"Name":"Sub1","Children":null}]},{"ID":5,"Name":"Sub1","Children":null}] 

最初のエントリはうまく見えますが、子自体を出力したくありません。子ども自身ではなく、ChildrenRootFolderのみを出力することは可能ですか?このように:

{"ID":4,"Name":"RootFolder","Children":[{"ID":5,"Name":"Sub1","Children":null}]} 

第二の問題は、私は(たとえばID 4(RootFolder)用)特定のフォルダのIDを入力したいとき、あります。私は唯一の応答としてこれを取得:

Specific Entry

を子要素が存在しないのはなぜ?コントローラは、このいずれかになります。

 // GET: api/Registers/5 
    [ResponseType(typeof(Register))] 
    public IHttpActionResult GetRegister(int id) 
    { 
     Register register = db.Register.Find(id); 
     if (register == null) 
     { 
      return NotFound(); 
     } 

     return Ok(register); 
    } 

概要:

  • どのように私だけに出力をフィルタリングすることができ、それぞれの子供たちとRootFolder Sを示すが、子供を示していない自分自身をオブジェクト?
  • 特定のIDを指定すると、子供がいないのはなぜですか?

答えて

0

私はあなたがデータベース操作のためにエンティティフレームワークを使用していると思います。 最初のポイントは、ルートフォルダの行をフィルタリングする必要があります。ルートのためにRegister_IDはヌルです

db.Register.Where(x => x.Register_ID == null && x.ID==ID).ToList() 

ルートフォルダの子供をロードする2番目のポイントには、ナビゲーションプロパティを含めることができます。たとえば、以下のコードを参照してください。

db.Register.Include(x => x.Children).Where(x => x.Register_ID == null).ToList(); 
+0

ありがとうございました。私は解決する必要があるいくつかの問題があります。今日私は子要素を取得していません(私は昨日から私のコードを変更しませんでした)。奇妙なことは:登録ID 4が5の子である場合、それは機能しません。私のID 5が4歳の子供であれば、それはうまくいきます。だから、子供はIDがRegister_IDより大きい場合にのみ働く。これは昨日問題ではなかった。私はこれを修正するとあなたの提案を試みますが、それは非常にうまく見えます。ありがとう! – Tobias

+0

これで正常に動作しました。しかし、私は(x => x.Register_ID == null)を使うことはできません。 Register_IDはモデルによって不明です。なぜEFが "子"オブジェクトの名前をデータベースの "Register_ID"に変更したのか分かりません。 Register_IDの代わりにx.Childrenを使用すると、例外が発生し、オブジェクトとリストをnullと比較することができなくなります。 – Tobias

+0

これをDapperで行う方法。私は同じ構造とモデルを持っています。 –

関連する問題