2013-10-02 46 views
1

我有sql表中有三列(ID,名稱,ParentID),每列有很多記錄。現在我想要的是從ParrentId中獲取所有的hiearachy,並將其包含在三個視圖中。從c#中使用LINQ列表中的sql返回層次結構

這可以用一些不錯的LINQ解決方案解決嗎?

我之前嘗試的是使用List-s其中之一是小孩,但問題發生導致一些小孩列表也可以有更多小孩下。

我需要這與LINQ代碼:

List<Menu> hList = new List<Menu>(); 

var m1 = new Menu(); 

var m2 = new Menu(); 
var m3 = new Menu(); 

hList.AddRange(new List<Menu>() { m1, m2, m3}); 

當然在實際例子中它不會是僅有3孩子VAR-S。

Thnx任何幫助和建議!

+0

http://stackoverflow.com/questions/17968069/linq-sort-a-flat-list-based-on-childorder –

+0

+1只是胡亂扔骰子,但可以像這樣無法實現與'AssociateWith'?你是否正在尋找T-Sql的'WITH'與'UNION'結合的linq等價物? – Silvermind

+0

您是使用linq-to-sql或linq-to-entities將數據從數據庫中映射出來的嗎?如果是這樣,你能不能修改你的表,以便你有一個自引用的外鍵引用ParentID-> ID ...當你從數據庫中檢索時,它會自動將你的對象映射到所需的層次結構中。 –

回答

0
public void FillMenu(EntityCollection menuList, List<Menu> hList, int? parentMenuId) 
    { 
     var g = from m in menuList 
       where ((MenuEntity)m).ParentMenuId == parentMenuId 
       select (MenuEntity)m; 

     foreach (MenuEntity menu in g) 
     { 
      var newMenu = new Menu(); 
      newMenu.Id = menu.Id; 
      newMenu.Name = menu.Name; 

      newMenu.ChildMenu = new List<Menu>(); 

      FillMenu(menuList, newMenu.ChildMenu, newMenu.Id); 

      hList.Add(newMenu); 
     } 

    }