2016-07-27 6 views
1

Здравствуйте, я обновляю свой вопрос для лучшего объяснения.Как получить все дочерние и дочерние элементы из родительского идентификатора в linq

Я структура таблицы, имеющий родитель потомок как этого

enter image description here

Я создал класс модуля как этого

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

Теперь я хочу, чтобы список корневого узла переупорядочения служб, имеющий menuid 10 .

Это то, что я сделал еще

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

Вам нужен [рекурсивный CTE] (http://stackoverflow.com/search?q=recursive+cte+linq), который не поддерживает LINQ. –

+0

y не очень хорошо спроектирован. Я предоставил родительско-детские отношения. –

ответ

-1

не могли бы вы сделать некоторые вещи, как этот

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

Добавив все внучат в единое целое, а затем суммировать оба ваших внучат и recordList, и сделать отличный в теме ?

+0

спасибо за ваш ответ .. я обновил свой пл. Pls check.it объяснит лучше –

Смежные вопросы