【发布时间】:2014-03-20 00:42:57
【问题描述】:
IHAC 在可能的情况下更喜欢实体框架而不是代码,现有数据库(因此更改架构是不可能的)。我正在尝试获取给定 A id 的唯一 E 元素列表。我是 MS Entities 的新手,这不是我处理它的方式(我认为对于这个小组与他们一起做的一些复杂的事情,它们比冰上的鼻涕要慢)但它是我得到的。
这是一个快速图表: 这不是我的数据库设计!不要向提问者开枪:)
这是我要编写的 SQL:
SELECT E.e_Id, E.e_Name
FROM
A,
B,
C,
D,
E
WHERE
A.a_Id = 'someid'
AND A.a_Id = B.a_Id
AND B.b_Id = C.b_Id
AND C.d_Id = D.d_Id
AND D.e_Id = E.e_Id
GROUP BY E.e_Id, E.e_Name
逐步,我可以到达表 D 实体,但我不知道如何到达 E 实体:
var bLocal = context.AEntities
.Where( a => a.a_Id == 'someid' )
.Select( b => b.B );
var dLocal = bLocal
.SelectMany( b => b.D );
var eLocal = dLocal. ????
- OR? -
var eLocal = context.EEntities ???
【问题讨论】:
-
您可以使用查询语法在 linq 的一个语句中执行多个 froms。
from t1 in table1 from t2 in table2等 -
@Silvermind,他只是对他的 sql 连接使用旧式 SQL89 格式而不是内部连接 (SQL92),而不是创建笛卡尔积。
-
@rcarver,我的回答有效吗?您还有其他问题吗?
-
@paqogomez,是的,但是......他正在这样做,但仅通过包含
where来限制。您的示例显示了他完全需要的内部连接。他本可以在 sql 查询中做到这一点,但对每个人来说都是他自己的。您的答案是实际可行的方法,但是伙计,加入方法链看起来很难看。 ;) -
@paqogomez 还没有 :( 他们创建的模型中没有关系表 C,所以我无法从这里到达那里(我可以看到)是的,他们使用到处都是丑陋的方法语法。为什么它们不在模型中包含关系表?
标签: c# sql entity-framework