【问题标题】:CAML query...what is wrong with it?CAML 查询...有什么问题?
【发布时间】:2017-03-28 02:11:54
【问题描述】:

我有一个不断抛出错误的 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 在上面的顺序仅用于说明目的。在我的真实案例中,数字不是按顺序排列的。所以我不能使用在开始数字和结束数字之间进行搜索的查询。

【问题讨论】:

    标签: sharepoint caml


    【解决方案1】:

    你可以试试这个查询,你不需要运算符“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>
    

    【讨论】:

      【解决方案2】:

      你有一个语义错误。只需删除这个包装元素:

      <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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-03
        • 2010-12-31
        • 1970-01-01
        • 2015-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多