我有一个不断抛出错误的 CAML 查询。
System.Web.Services中发生了"System.Web.Services.Protocols.SoapException"类型的第一次机会异常.dll线程0x1574已退出,代码为 0 (0x0(。
是的,所以不是很描述。 我猜这与我如何使用"Or"元素有关。
这是我的查询的样子:
<Where>
<And>
<IsNotNull>
<FieldRef Name='myRefID' />
</IsNotNull>
<And>
<Or>
<In>
<FieldRef Name='myRefID' />
<Values>
<Value Type='Number'>1</Value>
<Value Type='Number'>2</Value>
<Value Type='Number'>3</Value>
<Value Type='Number'>4</Value>
...
<Value Type='Number'>499</Value>
</Values>
</In>
<In>
<FieldRef Name='myRefID' />
<Values>
<Value Type='Number'>500</Value>
<Value Type='Number'>501</Value>
<Value Type='Number'>502</Value>
<Value Type='Number'>503</Value>
...
<Value Type='Number'>999</Value>
</Values>
</In>
<In>
<FieldRef Name='myRefID' />
<Values>
<Value Type='Number'>1000</Value>
<Value Type='Number'>1001</Value>
<Value Type='Number'>1002</Value>
<Value Type='Number'>1003</Value>
...
<Value Type='Number'>1111</Value>
</Values>
</In>
</Or>
</And>
</And>
</Where>
还要注意的是,我需要搜索特定的 ID,因此这就是我使用这么多 IN 子句的原因。 上面的 ID 顺序仅用于说明目的。 在我的真实案例示例中,数字不按顺序排列。所以我不能使用在开始和结束数字之间搜索的查询。
您可以尝试此查询,您不需要运算符"and"和"or",请记住 CAML 中的运算符仅适用于 2 个元素。
<Where>
<And>
<IsNotNull>
<FieldRef Name='myRefID' />
</IsNotNull>
<In>
<FieldRef Name='myRefID' />
<Values>
<Value Type='Number'>1</Value>
<Value Type='Number'>2</Value>
<Value Type='Number'>3</Value>
<Value Type='Number'>4</Value>
<Value Type='Number'>499</Value>
</Values>
</In>
</And>
</Where>
您有语义错误。只需删除此包装器元素:
<Where>
<And>
<IsNotNull>
<FieldRef Name='myRefID' />
</IsNotNull>
<And> <<================================ remove it
<Or>
<In>
<FieldRef Name='myRefID' />
<Values>
<Value Type='Number'>1</Value>
<Value Type='Number'>2</Value>
若要简化 CAML 查询创建,请使用以下工具:
- 骆驼设计师 - 在我看来是最好的
- MSDN 官方推荐的工具