【发布时间】:2020-03-14 17:14:21
【问题描述】:
我有以下代码:
var approver = _context.approver.Where(x => x.ApproverName != "").Select(x => x.ApproverUserId).Distinct();
而生成的SQL是
SELECT DISTINCT "x"."approveruserid"
FROM "approver" "x"
WHERE (("x"."approvername" <> '') OR "x"."approvername" IS NULL )
我希望 SQL 应该是
SELECT DISTINCT "x"."approveruserid"
FROM "approver" "x"
WHERE (("x"."approvername" <> '') OR "x"."approvername" IS NOT NULL )
因此,生成的 SQL 缺少 NOT 子句,这会导致返回错误的结果。顺便说一句,我正在使用 Oracle 数据库。在 Oracle 中,null 等于空字符串。
如何解决?
[更新]:我正在使用
var approver = _context.approver.Where(x => x.ApproverName.Length > 0).Select(x => x.ApproverUserId).Distinct();
作为一种解决方法。但我对另一个可以正确生成 SQL 以进行空字符串检查的建议持开放态度。
【问题讨论】:
-
预期查询中的 IS NOT NULL 条件没有区别, 条件只能为非空值。
-
@jarlh 如果
NOT子句不存在,我会得到错误的结果。 -
顺便说一下,我正在使用 Oracle。
-
您的预期结果是什么?我的意思是,approvername 为空的行会发生什么?
-
我希望它返回批准人名称不是空字符串或 null 的记录。
标签: sql oracle entity-framework linq