我有一个名为MenuItem的数据库表(MenuItemID,ParentMenuItemID,MenuItemName)。我想用它来填充Menu控件(可能是.NET Menu控件)。
每个MenuItem都有一个父级。如果没有父级,则它是顶级菜单项。我已经将LINQ to SQL类映射到MenuItem表。由于我的表有一个从ParentMenuItemID到MenuItemID的外键,我自动生成的MenuItem类包含一个MenuItem的集合。此集合应包含菜单项的所有子项。
结果应存储在List中。
是否可以在一个查询中获取:
获取顶级菜单项然后迭代它们并查询每个子项,或者获取所有菜单项然后将它们放在右侧父项中应该没有任何问题。但如果这可以在一个查询中完成......我会很高兴:)
答案 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)
答案 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支持