EF4.3.1でいくつかの単純なLINQを使用しています。
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
})
残念ながら、これを実行すると、永遠に時間がかかります。そして、生成された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))
)
)
(望ましくない)nullチェックを生成しないようにlinqクエリを取得する方法について誰かが提案していますか?