从LINQ和LINQ到SQL的外键表中获取

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

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

结果应该存储在List中。

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

  • 所有顶级菜单项
  • 所有的孩子都会收集到父母对象下收集的顶级菜单项
  • 获取顶级菜单项然后迭代它们并查询每个子项或获取所有菜单项然后将它们放入正确的父项中应该没有任何问题。 但是,如果这可以在一个查询中完成......我会很高兴:)


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

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

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


    您可以尝试使用DataLoadOptions.LoadWith方法。
    但是,Microsoft LINQ to SQL Server不支持这种情况,只能通过Oracle,MySQL,PostgreSQL和SQLite的Devart实现。
    Devart团队
    http://www.devart.com/dotconnect
    用于Oracle,MySQL,PostgreSQL,具有实体框架的SQLite和LINQ to SQL支持的ADO.NET数据提供程序

    链接地址: http://www.djcxy.com/p/40805.html

    上一篇: Fetch from foreign key tables with LINQ and LINQ to SQL

    下一篇: Managing child lists with LINQ to SQL