2009-12-26 65 views
0

我有一個名爲MenuItem(MenuItemID,ParentMenuItemID,MenuItemName)的數據庫表。我想用它來填充一個Menu控件(可能是.NET菜單控件)。從LINQ和LINQ到SQL的外鍵表中獲取

每個MenuItem都有一個父項。如果沒有父項,則它是頂級菜單項。我已經將一個LINQ to SQL類映射到MenuItem表。由於我的表有一個從ParentMenuItemID到MenuItemID的自己的外鍵,我的自動生成的MenuItem類包含一個MenuItem集合。該集合應包含菜單項的所有子項。

結果應存儲在列表中。

是否有可能在一個查詢獲取:

  • 所有頂級菜單項
  • 所有兒童其父母在收集到的頂層菜單項的對象

它不應該可能會遇到任何問題以獲取頂級菜單項,然後遍歷它們並查詢每個子項,或者獲取所有菜單項,然後將它們放入正確的父項中。但是,如果這可以在一個單一的查詢做......我很高興:)

回答

0

如果你的LINQ to SQL MODEL有一個導航屬性本身則:

dataContext.MenuItem 
.Where(m=>m.ParentMenuItemId==null) 
.Select(m=> new {TopLevelItem = m,Children = m.Children}) 

否則可以更換米。兒童用dataContext.MenuItem.Where(c=>c.ParentMenuItemId==m.MenuItemId)

0

您可以嘗試使用DataLoadOptions.LoadWith方法。
但是,Microsoft LINQ to SQL Server不支持這種情況,只能通過適用於Oracle,MySQL,PostgreSQL和SQLite的Devart實現。
爲Oracle,MySQL和PostgreSQL,SQLite的Devart團隊
http://www.devart.com/dotconnect
ADO.NET數據提供商與 實體框架和LINQ to SQL支持