将布尔值WHERE谓词与布尔值进行比较

时间:2016-03-24 15:52:26

标签: c# sql sql-server linq

我正在扩展内部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

这会出现以下错误:

  

在预期条件的上下文中指定的非布尔类型的表达式,接近'('。

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