내가 표준 GroupJoin
/SelectMany
/DefaultIfEmpty
접근 방식을 사용하여 LINQ에 참여를 왼쪽으로 수행하는 방법을 쓴 가입추가 하위 쿼리
var q = myDB.PurchaseOrderHeaders
.LeftJoin(
myDB.PurchaseOrderLines,
po => po.PurchaseOrderGUID,
line => line.PurchaseOrderGUID,
(po, line) => new { PO = po, Line = line }
);
var e = q.AsEnumerable();
나는 이런 식으로 SQL을 예상했다 :
SELECT [t0].[PurchaseOrderGUID], ..., [t1].[PurchaseOrderLineGUID], ...
FROM [dbo].[PurchaseOrderHeader] AS [t0]
LEFT OUTER JOIN [dbo].[PurchaseOrderLine] AS [t1]
ON [t0].[PurchaseOrderGUID] = [t1].[PurchaseOrderGUID]
그러나 이것을 얻었다 :
SELECT [t0].[PurchaseOrderGUID], ..., [t2].[test], [t2].[PurchaseOrderLineGUID], ...
FROM [dbo].[PurchaseOrderHeader] AS [t0]
LEFT OUTER JOIN (
SELECT 1 AS [test], [t1].[PurchaseOrderLineGUID], ...
FROM [dbo].[PurchaseOrderLine] AS [t1]
) AS [t2] ON [t0].[PurchaseOrderGUID] = [t2].[PurchaseOrderGUID]
차이점은 SELECT 1 as [test]
인 하위 쿼리입니다. 왜 이것을 생성합니까? 성능에 중대한 영향을 미칠 가능성이 있습니까? 그렇다면 쿼리를 수정하여이를 제거 할 수 있습니까?