首页 文章

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

提问于
浏览
0

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

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

结果应存储在List中 .

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

  • 所有顶级菜单项

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

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

2 回答

  • 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

  • 0

    您可以尝试使用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数据提供程序

相关问题