Я использую некоторые простые LINQ в моей EF 4.3.1:Почему 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 секунд. Если удалить блок/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, чтобы не генерировать (нежелательные) нулевые чеки?
Каков тип 'IDColumn' в вашей модели .NET и в базе данных? –
В базе данных тип поля - Number (10,0), в .NET. Я сопоставлен с Int64 –