【发布时间】:2016-03-24 15:52:25
【问题描述】:
我正在扩展一个内部 SQL 生成器。
这个生成器是用 C# 设计的,我正在添加从 Linq 查询构建 SQL 查询的功能。 Linq 查询可以具有“常量”表达式(即在 SQL 生成之前变为真/假/等的表达式)。
举个例子,像这样的 linq 查询:
var OuterProperty = *something*;
ParentObject.Where(
element =>
OuterProperty != null && element.Property == OuterProperty
)
可以归结为:
SELECT Property FROM ParentObject WHERE true AND Property = OuterProperty
这在 SQL 中失败,因为我在 where 谓词中使用了实际的布尔值。
我的问题是; 是否可以通过这种方式使用诸如布尔值之类的常量值?
要对此进行测试,您可以尝试以下 sn-p:
select 1 where IIF(true,1,0) = 1
这会给你以下错误:
在预期条件的上下文中指定的非布尔类型表达式,靠近 '('。
【问题讨论】:
-
我希望您的代码会产生错误,例如“未知列
true”。 -
我用过类似
1=1
标签: c# sql sql-server linq