实体框架是否可以在左联接中尊重“ UseDatabaseNullSemantics”选项?
基本上,我想防止添加“ OR(([[ExtentX]。[Property] IS NULL)AND([[ExtentY]。[Property] Is Null))”的添加到生成的SQL查询中。我已经看过以下讨论,但是没有一个讨论可以为我的查询提供解决方案:
UseDatabaseNullSemantics still generating NULL checks
Why is EF generating SQL queries with unnecessary null-checks?
Prevent NULL checks in LINQ to Entity Joins
它必须是一个左联接...我不能将联接条件放在where子句中,因为它不会产生相同的结果,并且如果没有匹配项,我需要允许空数据(因此是左联接)
基本上,我有一个类似的查询:
(from c in dbContext.CPUs
join u in dbContext.UData on c.User equals u.User into ud
from uds in ud.DefaultIfEmpty()
select new ResultOjbect{});
它会生成此讨厌的SQL:
SELECT BLAH FROM CpuTable LEFT OUTER JOIN UserTable (ON CPUTable.User = UserTable.User)
OR ((CpuTable.User IS NULL) AND (UserTable.User IS NULL))
OR((CpuTable.User IS NULL)和(UserTable.User IS NULL))的添加会导致可怕的性能,并使查询需要2分钟才能处理17000条记录。如果从生成的SQL中删除此记录,则需要23秒才能加载17000多个记录。
为什么没有控制此选项的选项?这是非常不必要的,并且会使我的查询缓慢进行。有人知道解决方法吗?