【问题标题】:LINQ table join with entity FrameworkLINQ 表连接与实体框架
【发布时间】:2009-09-21 06:00:42
【问题描述】:

在我的数据库中,我有... TableA、TableB 和 TableC

TableB只有2列,是TableA和TableC的主键,所以它确实定义了两个表之间的一对多关系

我想用 SQL 做的是:

SELECT * 
FROM TablesA a
JOIN TablesB b ON a.AID = b.AID
WHERE b.BID = 1

在实体框架中它不会为我创建一个 TablesB 来进行连接,我认为是因为 TableB 只有外键!

那我该怎么做呢?

【问题讨论】:

标签: c# .net linq


【解决方案1】:

使用 LINQ 进行连接相当简单

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

我认为真正的问题可能是 - 为什么没有TablesB 的实体类?我们可能需要更多信息来回答这个问题。

【讨论】:

  • 我认为这是因为 TableB 是由外键组成的,所以它不会被显示出来!
【解决方案2】:

当您从数据库中导入表时,实体框架摆脱了 TableB 表并显示 TableA 和 TableC 具有多对多关系。 TableA 具有导航属性 TableCs,反之亦然。因此,您只需要使用这些导航属性,例如:

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

var tableARow= db.TableA.Include("TableCs").First(s => s.Id == 1);

【讨论】:

  • 感谢 Puzzled,看起来更像。就一件事。使用 s.Id == 1,实际上我需要将 tableC 的 ID 设置为 1,而不是 TableA。我该怎么做?所以这是我想要返回的 TableA 实体,但我想填充 TableC 的 TableC.ID = 1 .... 有意义吗?
  • 表 A 中的行列表,其中包含表 C 中 Id = 1 的行: var tablearows = db.TableC.Include("TableAs").Where(c => c.Cid == 1).Select(c => c.TableAs).ToList();
猜你喜欢
  • 1970-01-01
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多