实体框架6-左联接-防止在联接子句条件中添加空检查

时间:2018-12-04 20:06:51

标签: sql asp.net-mvc entity-framework linq entity-framework-6

实体框架是否可以在左联接中尊重“ 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多个记录。

为什么没有控制此选项的选项?这是非常不必要的,并且会使我的查询缓慢进行。有人知道解决方法吗?

0 个答案:

没有答案