如何使用常规SQL和Linq-To-Entities检索1-2个查询的所有记录?

时间:2011-05-07 15:48:35

标签: sql sql-server tsql linq-to-sql linq-to-entities

我在Picasa上传了简化的SQL ERD。 我试图这样做,但我通过超过2个查询来管理它。

我需要从表 D 中检索表 E 的特定 E_Id 和特定 TypeId 的所有记录表 A

更新:我还需要检索映射到 TypeId B 的所有记录,即使并非所有记录都已映射表 C (某种LEFT-RIGHT JOIN)

我需要在最多2个查询中执行此操作,然后将其转换为Linq-To-Entites语句 如果可以使用1个查询完成,我更喜欢1个查询

谢谢

2 个答案:

答案 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;