c# - 使用 Entity Framework 的具有多对多关系的 Linq 查询

标签 c# linq entity-framework

我有两个表:tbAtbB。在它们之间我有一个 n 到 n 的关系,因此生成了一个表 tbAB数据库。我首先使用实体​​框架数据库,然后当我映射这些表时,它不会为 tbAB 生成特定实体。因此,如果我不能直接调用 tbAB,我看不到如何创建与这两个表相关的查询。 我想在 SQL 中执行的操作如下:

 SELECT * 
 FROM tbA
 INNER JOIN tbAB 
 ON tbAB.idA = tbA.idA
 INNER JOIN tbB
 ON tbB.idB = tbAB.idB

这就是我想用 Linq 做的事情:

  var table = (from l in db.tbA
                                            join k in db.tbB on l.? equals k.?
                                            where ?.IDCONCESSAO == objectTbB.IDCONCESSAO
                                            select l).ToList();

问题是如何在 Linq 表达式中执行此操作?

提前致谢。

最佳答案

按照@Michal 提出的模型,您可以这样做:

var query= from a in db.TableAs
           from b in a.TableBs
           where b.Id==10
           select new{A_Id=a.Id,a.Name, B_Id=b.Id,b.Price,...};

select 中,您可以从两个实体中选择您需要的属性(我还从 TableA 中选择了一个 Name TableB 中的价格,以帮助您更好地理解此示例)。从关系的各个方向来看,您永远不会与 junction table 进行交互。 ,您只需按照每个方向的关系,就好像它是一对多的关系。我在上面显示的查询将转换为 sql 查询,其中表之间的连接将以这种方式进行:

{SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Name] AS [Name], 
[Join1].[Id] AS [Id1], 
[Join1].[Price] AS [Price]
FROM  [dbo].[TableAs] AS [Extent1]
INNER JOIN  (SELECT [Extent2].[TableA_Id] AS [TableA_Id], [Extent3].[Id] AS [Id], [Extent3].[Price] AS [Price]
    FROM  [dbo].[TableBTableAs] AS [Extent2]
    INNER JOIN [dbo].[TableBs] AS [Extent3] ON [Extent3].[Id] = [Extent2].[TableB_Id] ) AS [Join1] ON [Extent1].[Id] = [Join1].[TableA_Id]
WHERE 10 = [Join1].[Id]}

关于c# - 使用 Entity Framework 的具有多对多关系的 Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28950991/

相关文章:

c# - 将水平线和垂直线分组到表中 (C#)

c# - Buddy 类到底是什么?如何使用它向现有类添加注释?

C# 当我准备好让程序结束时,如何停止 tcpClient.Connect() 进程?它只是在那里停留了 10 秒钟!

c# - Linq 展开嵌套的 foreach

entity-framework - 使用新映射规则扩展 EF 6.2

c# - Entity Framework 4(关联配置过滤器)

数据库可视化工具

c# - 如何使用 codeDom 命名空间将成员字段设置为值

linq - 如何在 powershell 中使用 linq explict 或在 SQL 中使用 "NOT IN"的类似物

c# - 如何创建 IEnumerable.ToString