使用LINQ和LINQ to SQL从外键表获取
我有一个名为MenuItem(MenuItemID、ParentMenuItemID、MenuItemName)的数据库表。我想用它来填充菜单控件(可能是.NET菜单控件) 每个菜单项都有一个父菜单项。如果没有父项,则它是顶级菜单项。我已经创建了一个映射到MenuItem表的LINQ-to-SQL类。由于我的表本身有一个从ParentMenuItemID到MenuItemID的外键,因此自动生成的MenuItem类包含一个MenuItem集合。此集合应包含菜单项的所有子项 结果应存储在列表中 是否可以在一个查询中获取:使用LINQ和LINQ to SQL从外键表获取,linq,linq-to-sql,Linq,Linq To Sql,我有一个名为MenuItem(MenuItemID、ParentMenuItemID、MenuItemName)的数据库表。我想用它来填充菜单控件(可能是.NET菜单控件) 每个菜单项都有一个父菜单项。如果没有父项,则它是顶级菜单项。我已经创建了一个映射到MenuItem表的LINQ-to-SQL类。由于我的表本身有一个从ParentMenuItemID到MenuItemID的外键,因此自动生成的MenuItem类包含一个MenuItem集合。此集合应包含菜单项的所有子项 结果应存储在列表中 是
- 所有顶级菜单项
- 将所有子菜单项添加到在其父对象下收集的顶级菜单项
获取顶级菜单项,然后迭代它们并查询每个子菜单项,或者获取所有菜单项,然后将它们放入正确的父菜单项中,这应该不会有任何问题。但是如果这可以在一个查询中完成。。。我很高兴:)如果Linq to Sql模型本身有一个导航属性,那么:
dataContext.MenuItem
.Where(m=>m.ParentMenuItemId==null)
.Select(m=> new {TopLevelItem = m,Children = m.Children})
否则,您可以将m.Children替换为
dataContext.MenuItem.Where(c=>c.ParentMenuItemId==m.MenuItemId)
您可以尝试使用DataLoadOptions.LoadWith方法但是,Microsoft LINQ to SQL Server不支持此方案,只有针对Oracle、MySQL、PostgreSQL和SQLite的Devart实现才支持此方案
德瓦特团队
用于Oracle、MySQL、PostgreSQL和SQLite的ADO.NET数据提供程序 实体框架和LINQ到SQL支持