我在Picasa上传了简化的SQL ERD。 我试图这样做,但我通过超过2个查询来管理它。
我需要从表 D 中检索表 E 的特定 E_Id 和特定 TypeId 的所有记录表 A
更新:我还需要检索映射到 TypeId 的 B 的所有记录,即使并非所有记录都已映射表 C (某种LEFT-RIGHT JOIN)
我需要在最多2个查询中执行此操作,然后将其转换为Linq-To-Entites语句 如果可以使用1个查询完成,我更喜欢1个查询
谢谢
答案 0 :(得分:0)
以下任何原因都不适合您?
SELECT D.*
FROM D
INNER JOIN C
ON C.Id = D.C_Id
INNER JOIN B
ON B.Id = C.B_Id
INNER JOIN A
ON A.Id = B.A_Id
WHERE D.E_id = <The E_Id> AND A.Typeid = <The Typeid>
答案 1 :(得分:0)
SQL查询:
SELECT D.*
FROM D
INNER JOIN C ON C.Id = D.C_Id
INNER JOIN B ON B.Id = C.B_Id
INNER JOIN A ON A.Id = B.A_Id
WHERE D.E_Id = @eId AND A.TypeId = @typeId
SELECT B.*
FROM B
INNER JOIN A ON A.Id = B.A_Id
WHERE A.TypeId = @typeId
直接Linq(如果导航属性不存在):
var query = from d in context.D
join c in context.C on c.Id equals d.cId
join b in context.B on b.Id equals c.bId
join a in context.A on a.Id equals b.aId
where d.eId == eId && a.TypeId == typeId
select d;
var query2 = from b in context.B
join a in context.A on a.Id equals b.aId
where a.TypeId == typeId
select b;
Linq是否正确设置了导航属性:
var query = from d in context.D
where d.E.Id == eId &&
d.C.B.A.TypeId == typeId
select d;
var query2 = from b in context.B
where b.A.TypeId == typeId
select b;