【问题标题】:Fetch from foreign key tables with LINQ and LINQ to SQL使用 LINQ 和 LINQ to SQL 从外键表中获取
【发布时间】:2010-01-04 16:49:45
【问题描述】:

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

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

结果应该存储在一个列表中。

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

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

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

【问题讨论】:

    标签: linq linq-to-sql


    【解决方案1】:

    如果你的 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)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-05
        相关资源
        最近更新 更多