我正在扩展内部SQL生成器。
这个Generator是用C#设计的,我正在添加从Linq查询构建SQL查询的功能。 Linq Queries可以拥有' Constant'表达式(即在SQL生成之前变为true / false /等的表达式)。
举一个例子,一个linq查询,如:
var OuterProperty = *something*;
ParentObject.Where(
element =>
OuterProperty != null && element.Property == OuterProperty
)
可归结为:
SELECT Property FROM ParentObject WHERE true AND Property = OuterProperty
这在SQL中失败,因为我在where谓词中使用实际的布尔值。
我的问题是; 是否可以以这种方式使用像布尔值这样的常量值?
要对此进行测试,您可以尝试以下代码段:
select 1 where IIF(true,1,0) = 1
这会出现以下错误:
在预期条件的上下文中指定的非布尔类型的表达式,接近'('。
答案 0 :(得分:0)
SQL中不存在TRUE和FALSE。
而是使用一个计算结果为true或false的表达式。
public class APIRepository
{
Repository repository = new Repository();
由于您自己生成SQL,因此很容易优化大多数布尔值:
SELECT 'hello' WHERE (1 = 1); // true: selects 'hello'
SELECT 'world' WHERE (1 = 0); // false: selects nothing