이 질문은 question에서 계속됩니다. 어제 왜 내 Entities에서 조인 쿼리를 사용하면 복잡한 SQL이 생성되었는지 묻습니다. 덜했다 (일종의 사전 ANSI SQL 구문 등) where 절을 통해 단체 가입 반면Linq에서 Join과 "Olde Style"사전 ANSI 조인 구문을 사용하는 경우의 차이점은 무엇입니까?
var query = from ev in genesisContext.Events
join pe in genesisContext.People_Event_Link
on ev equals pe.Event
where pe.P_ID == key
select ev;
, 데이터베이스에서 실행 18 초 걸렸습니다 끔찍한 SQL을 생산 :이 같은 쿼리를 수행하는 것 같았다 두 번째 프로그램보다 내가 모든 것을 봤했지만 여전히 두 번째는 처음에 다른 SQL을 생성하는 이유를 이해하지 못하고 같은 결과
var query = from pe in genesisContext.People_Event_Link
from ev in genesisContext.Events
where pe.P_ID == key && pe.Event == ev
select ev;
을 생산합니다. 누군가 제게 그 차이를 설명해 주시겠습니까? 나는 키워드를 조인을 사용해야하는 경우
이 내 쿼리에 가입 사용 및 실행 18 초 걸렸습니다 때 생성 된 SQL입니다 :
SELECT
1 AS [C1],
[Extent1].[E_ID] AS [E_ID],
[Extent1].[E_START_DATE] AS [E_START_DATE],
[Extent1].[E_END_DATE] AS [E_END_DATE],
[Extent1].[E_COMMENTS] AS [E_COMMENTS],
[Extent1].[E_DATE_ADDED] AS [E_DATE_ADDED],
[Extent1].[E_RECORDED_BY] AS [E_RECORDED_BY],
[Extent1].[E_DATE_UPDATED] AS [E_DATE_UPDATED],
[Extent1].[E_UPDATED_BY] AS [E_UPDATED_BY],
[Extent1].[ET_ID] AS [ET_ID],
[Extent1].[L_ID] AS [L_ID]
FROM [dbo].[Events] AS [Extent1]
INNER JOIN [dbo].[People_Event_Link] AS [Extent2] ON EXISTS (SELECT
1 AS [C1]
FROM (SELECT 1 AS X) AS [SingleRowTable1]
LEFT OUTER JOIN (SELECT
[Extent3].[E_ID] AS [E_ID]
FROM [dbo].[Events] AS [Extent3]
WHERE [Extent2].[E_ID] = [Extent3].[E_ID]) AS [Project1] ON 1 = 1
LEFT OUTER JOIN (SELECT
[Extent4].[E_ID] AS [E_ID]
FROM [dbo].[Events] AS [Extent4]
WHERE [Extent2].[E_ID] = [Extent4].[E_ID]) AS [Project2] ON 1 = 1
WHERE ([Extent1].[E_ID] = [Project1].[E_ID]) OR (([Extent1].[E_ID] IS NULL) AND ([Project2].[E_ID] IS NULL))
)
WHERE [Extent2].[P_ID] = 291
이는 SQL이다는 는 ANSI 스타일 구문을 사용하여 생산하는 (그리고 나는 SQL 자신을 쓰고 있다면 내가 쓴다 것과 비슷한입니다)되었다
SELECT * FROM Events AS E INNER JOIN People_Event_Link AS PE ON E.E_ID=PE.E_ID INNER JOIN PEOPLE AS P ON P.P_ID=PE.P_ID
WHERE P.P_ID = 291
큰 질문입니다. – tomfanning
어떤 DB를 사용하고 있습니까? SQL 코드는 어떻게 생겼습니까? – AnthonyWJones