C# 具有实体框架的LINQ表连接

C# 具有实体框架的LINQ表连接,c#,.net,linq,C#,.net,Linq,在我的数据库里我有。。。表A、表B和表C TableB只有两列,即TableA和TableC的主键,因此它真正定义了两个表之间的一对多关系 我想使用SQL做的是: SELECT * FROM TablesA a JOIN TablesB b ON a.AID = b.AID WHERE b.BID = 1 在实体框架中,它没有为我创建表B来进行连接,我认为这是因为表B只有外键 那么我该怎么做呢?使用LINQ进行连接相当简单 from a in TablesA join b in Tables

在我的数据库里我有。。。表A、表B和表C

TableB只有两列,即TableA和TableC的主键,因此它真正定义了两个表之间的一对多关系

我想使用SQL做的是:

SELECT * 
FROM TablesA a
JOIN TablesB b ON a.AID = b.AID
WHERE b.BID = 1
在实体框架中,它没有为我创建表B来进行连接,我认为这是因为表B只有外键


那么我该怎么做呢?

使用LINQ进行连接相当简单

from a in TablesA
join b in TablesB
on a.AID equals b.AID
into joined
where b.BID == 1
select joined

我认为真正的问题可能是-为什么不为
表b
创建一个实体类?我们可能需要更多信息来回答这个问题。

当您从数据库导入表时,entity framework去掉了TableB表,并显示TableA和TableC具有多对多关系。TableA具有导航属性TableCs,反之亦然。因此,对于示例,您需要使用以下导航属性:

var tableARow= db.TableA.First(s => s.Id == 1); 
if (!tableARow.TableCs.IsLoaded) { tableARow.TableCs.Load(); }


我想这是因为TableB是由外键组成的,所以没有显示出来!谢谢,看起来更像。只有一件事。当s.Id==1时,实际上需要将tableC的Id设置为1,而不是TableA。我该怎么做?所以它是一个TableA实体,我想返回,但我想填充TableC,使TableC.ID=1。。。。有意义吗?表A中的行列表,其中包含表C中Id=1的行:var tablearows=db.TableC.Include(“TableAs”)。其中(C=>C.Cid==1)。选择(C=>C.TableAs.ToList();
var tableARow= db.TableA.Include("TableCs").First(s => s.Id == 1);