使用LINQ和LINQ to SQL从外键表中获取

时间:2009-12-26 19:03:15

标签: linq linq-to-sql

我有一个名为MenuItem的数据库表(MenuItemID,ParentMenuItemID,MenuItemName)。我想用它来填充Menu控件(可能是.NET Menu控件)。

每个MenuItem都有一个父级。如果没有父级,则它是顶级菜单项。我已经将LINQ to SQL类映射到MenuItem表。由于我的表有一个从ParentMenuItemID到MenuItemID的外键,我自动生成的MenuItem类包含一个MenuItem的集合。此集合应包含菜单项的所有子项。

结果应存储在List中。

是否可以在一个查询中获取:

  • 所有顶级菜单项
  • 所有孩子到其父对象下收集的顶级菜单项

获取顶级菜单项然后迭代它们并查询每个子项,或者获取所有菜单项然后将它们放在右侧父项中应该没有任何问题。但如果这可以在一个查询中完成......我会很高兴:)

2 个答案:

答案 0 :(得分:0)

如果您对Linq to Sql模型有自己的导航属性,那么:

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

否则,您可以用dataContext.MenuItem.Where(c=>c.ParentMenuItemId==m.MenuItemId)

替换m.Children

答案 1 :(得分:0)

您可以尝试使用DataLoadOptions.LoadWith方法。
但是,Microsoft LINQ to SQL Server不支持此方案,仅适用于Oracle,MySQL,PostgreSQL和SQLite的Devart实现。
Devart Team
http://www.devart.com/dotconnect
ADO.NET数据提供程序适用于Oracle,MySQL,PostgreSQL,SQLite等 实体框架和LINQ to SQL支持