【发布时间】:2015-05-20 06:12:33
【问题描述】:
查询是:
var query =
from stokHareket1 in ce.StokHarekets
from stokHareket2 in ce.StokHarekets
join stok in ce.Stoks on stokHareket1.StokId equals stok.Id
where (
stokHareket1.StokId == stokHareket2.StokId
)
select new
{
result = stokHareket1.StokId
};
在第一个项目中 EF 版本是:5.0.0,在第二个项目中:6.1.3
它在第一个项目中给出:
SELECT
[Extent1].[StokId] AS [StokId]
FROM [dbo].[StokHareket] AS [Extent1]
INNER JOIN [dbo].[StokHareket] AS [Extent2] ON [Extent1].[StokId] = [Extent2].[StokId]
WHERE [Extent1].[StokId] IS NOT NULL
第二个:
SELECT
[Extent1].[StokId] AS [StokId]
FROM [dbo].[StokHareket] AS [Extent1]
INNER JOIN [dbo].[StokHareket] AS [Extent2] ON ([Extent1].[StokId] = [Extent2].[StokId])
/*THIS LINE*/OR (([Extent1].[StokId] IS NULL) AND ([Extent2].[StokId] IS NULL))
WHERE [Extent1].[StokId] IS NOT NULL
/*THIS LINE*/ 不同
造成这种差异的原因是什么?
为了更好地可视化,这里是屏幕截图:
在数据库中,stokHareket 表
在 Edmx 中:
【问题讨论】:
-
StokId在其中一个项目中是否可以为空?您引用的 EF 版本是否相同? -
在 db 中允许检查 null,但在 edmx 中可以为 null(无)
-
这种情况在某个时候发生了变化吗?您可以尝试在 EDMX 中手动将可空属性设置为
True。在任何一种情况下,它都不会改变您的结果,因为WHERE子句将排除任何空 ID。 -
在第一个项目 EF 版本是:
5.0.0,在第二个项目中:6.1.3 -
setting the nullable property to True in the EDMX没有改变任何东西
标签: c# linq entity-framework