2016-07-27 26 views
1

こんにちは私は質問をよりよく説明するために更新しています。linqの親IDからすべての子要素と孫要素を取得する方法

私はこの

class MenuModel 
{ 
    public int ID { get; set; } 
    public int MenuID { get; set; } 
    public string MenuItem { get; set; } 
    public Nullable<int> ParentID { get; set; } 
    public string ImagePath { get; set; } 

    public List<MenuModel> Children { get; set; } 
} 

は今、私は10をmenuID属性たルートノードの並べ替えサービスのリストにしたいように私は、モジュールクラスを作成しているこの

enter image description here

のような親子関係を有するテーブル構造を持っています。

これは私がまだ行っているものです

List<MenuModel> lstMenu = new List<MenuModel>(); 
     NeelamWPFEntities _entity = new NeelamWPFEntities(); 
     var recordlist = _entity.Menus.Where(x => x.MenuID == 10 || x.ParentID == 10).ToList(); 

     foreach (var item in recordlist) 
     { 

      MenuModel objMenu = new MenuModel(); 
      objMenu.ID = item.ID; 
      objMenu.MenuID = item.MenuID; 
      objMenu.MenuItem = item.MenuItem; 
      objMenu.ParentID = item.ParentID; 
      objMenu.ImagePath = item.ImagePath; 
      lstMenu.Add(objMenu); 


     } 
     lstMenu.ForEach(v => v.Children = lstMenu.Where(vv => vv.ParentID.Equals(v.MenuID)).ToList()); 
     lstMenu = lstMenu.Where(u => u.ParentID == null).ToList(); 

     return lstMenu; 

私は2レベルの子のみを取得します。私はルート再オーダーサービスのNレベルの子を取得します。

Plaeseヘルプ、 Thankx

+0

これは再帰的です。テーブルがうまく設計されていないことを意味します。 –

+0

LINQをサポートしていない[再帰CTE](http://stackoverflow.com/search?q=recursive+cte+linq)が必要です。 –

+0

はうまく設計されていません。私は親子関係を提供しました。 –

答えて

-1

あなたはその

foreach(var correctParent in recordlist){ 
    var grandChild = _entity.Menus.Where(x => x.ParentID == correctParent.MenuID).ToList(); 
    //add your grandChild in a listOfAllGrandChild ... 
    } 

のようないくつかの事はあなたの孫とレコードリストの両方を合計し、明確な操作を行い、その後、単一のエンティティ内のすべてのあなたの孫を追加して行うことはできませんそれ?

+0

あなたの返事に感謝します..私はあなたのque pls check.itをよく説明します更新しました –

関連する問題