1
我使用一些简单的LINQ在我的EF 4.3.1:为什么Linq2EF连接生成一个完整的外连接?
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秒才能执行。如果我删除或/空块,它的股价下跌到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 –