sql - 实体框架 6 - 左连接 - 防止在连接子句条件中添加空检查
问题描述
实体框架有没有办法尊重左连接中的“UseDatabaseNullSemantics”选项?
基本上,我想防止在生成的 SQL 查询中添加“OR (([ExtentX].[Property] IS NULL) AND ([ExtentY].[Property] Is Null))”。我看过以下讨论,但没有一个提供适用于我的查询的解决方案:
UseDatabaseNullSemantics 仍然生成 NULL 检查
防止 LINQ to Entity Joins 中的 NULL 检查
它必须是左连接...我不能将连接条件放在 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) AND (UserTable.User IS NULL))会导致糟糕的性能,并使 17000 条记录的查询需要 2 分钟。如果从生成的 SQL 中删除它,加载 17000+ 条记录需要 23 秒。
为什么没有选项来控制它?这是非常不必要的,并且会减慢我的查询速度。有人知道解决方法吗?
解决方案
推荐阅读
- j - @ (atop) 的 LHS 似乎与 @: (at) NB 一样应用于整个列表。+/@(*:@:mdev)
- php - 为什么 ftp_chmod() 会抛出“未实现”错误?
- python - 如何在python中将提取的Web数据转换为csv文件
- php - 如何在 PHP 中添加购物车总数
- extjs - Sencha ExtJS 如何在同一行上有两个按钮和文本
- java - 创建自定义列表视图,但值包含“@”和看起来像 C 指针的东西
- javascript - iOS移动iPhone的按钮复选框双击问题
- axapta - 无法将字段添加到表单的字段组
- excel - DOORS DXL 导出到 .xlsx 不可读...Word 中除外
- javascript - 单击时添加类,然后单击时将其删除