1
내 EF 4.3.1에서 몇 가지 간단한 LINQ를 사용하고 있습니다 :Linq2EF Join이 왜 완전 외부 조인을 생성합니까?
Dim Results = (
From T1 In Context.Table1
Where T1.IDColumn = 1568
Join T2 In Context.Table2 On T1.IDColumn Equals T2.IDColumn
Select New With {
.Quantity = T1.Quantity
})
을 나는 영원히 takeing있어이 실행 불행하게도 때. 그리고 나는 문제를 생성 된 SQL의 완전히 불필요한 부분으로 보이는 것으로 추적했습니다. 생성 된 SQL은 다음과 같습니다.
SELECT 1 AS "C1"
,CAST("Extent2"."Quantity" AS number(19,0)) AS "C2"
FROM [table1] "Extent1"
INNER JOIN [table2] "Extent2" ON
(
(
CAST("Extent1"."IDColumn" AS number(19,0))
) = (
CAST("Extent2"."IDColumn" AS number(19,0))
)
)
OR
(
(
CAST("Extent1"."IDColumn" AS number(19,0)) IS NULL
)
AND
(
CAST("Extent2"."IDColumn" AS number(19,0)) IS NULL
)
)
WHERE
(
1568 = (
CAST("Extent1"."ForeginKey" AS number(19,0))
)
)
이 쿼리는 약 13 초 정도 걸립니다. 나는 OR/NULL 블록을 제거하는 경우는 0.122 초에 내려 간다 :
SELECT 1 AS "C1"
,CAST("Extent2"."Quantity" AS number(19,0)) AS "C2"
FROM [table1] "Extent1"
INNER JOIN [table2] "Extent2" ON
(
(
CAST("Extent1"."IDColumn" AS number(19,0))
) = (
CAST("Extent2"."IDColumn" AS number(19,0))
)
)
WHERE
(
1568 = (
CAST("Extent1"."ForeginKey" AS number(19,0))
)
)
사람은 내가 LINQ 쿼리는 (원치 않는) 널 (null) 검사를 생성하지 얻을 수있는 방법에 대한 제안이?
.NET 모델과 데이터베이스에있는 'IDColumn'유형은 무엇입니까? –
데이터베이스에서 필드 형식은 Number (10,0)이고 .NET에서는 Int64에 매핑되었습니다. –