CAML查询......有什么问题吗?

时间:2017-03-24 19:04:51

标签: sharepoint caml

我有一个不断抛出错误的CAML查询。

System.Web.Services.dll中出现'System.Web.Services.Protocols.SoapException'类型的第一次机会异常 线程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仅用于说明目的。在我的实例中,数字不符合规定。所以我不能使用在开始和结束编号之间搜索的查询。

2 个答案:

答案 0 :(得分:1)

您可以尝试此查询,您不需要运算符“和”和“或”,请记住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>

答案 1 :(得分:0)

您有语义错误。只需删除此包装元素:

<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查询创建,请使用以下工具:

  1. Caml Designer - 在我看来最好的
  2. MSDN officially recommended tools
相关问题