CAML“不在”查询

时间:2012-07-20 13:30:29

标签: sharepoint caml

有没有办法在SharePoint 2010中执行类似“NOT IN”的行为?我可以像这样轻松实现IN行为:

<Where>
   <In>
      <FieldRef Name="ID"/>
      <Values>
         <Value Type="Counter">1</Value>
         <Value Type="Counter">2</Value>
         <Value Type="Counter">3</Value>
         <Value Type="Counter">4</Value>
         <Value Type="Counter">5</Value>
      </Values>
   </In>
</Where>

但是有没有办法选择所有不在值枚举中的值?

这是USE CASE:我有一个带有AllowMultipleValues = true的Lookup字段,我需要从LookupList获取所有项目,这些项目不包含在Lookup字段中

提前致谢!

4 个答案:

答案 0 :(得分:2)

从SharePoint 2010开始,NotIncludes元素可能适合您。来自MSDN:

  

如果指定的字段是允许多个值的Lookup字段,则指定从FieldRef元素指定的字段的列表项中排除Value元素。

模板:

<NotIncludes>
    <FieldRef Name="Field_Name" />
    <Value Type="Field_Type" />
    <XML />
</NotIncludes>

答案 1 :(得分:1)

要获得“In”的相反行为,您必须进行嵌套的“Neq”查询。如果您正在使用多个值处理查找字段,则“NotIncludes”可以替换为“Neq”或与之结合使用。

<Query>
    <Where>
        <And>
            <And>
                <Neq>
                    <FieldRef Name="ID" /><Value Type="Counter">5</Value>
                </Neq>
                <Neq>
                    <FieldRef Name="ID" /><Value Type="Counter">13</Value>
                </Neq>
            </And>
            <And>
                <NotIncludes>
                    <FieldRef Name="children" /><Value Type="Lookup">20</Value>
                </NotIncludes>
                <NotIncludes>
                    <FieldRef Name="children" /><Value Type="Lookup">32</Value>
                </NotIncludes>
            </And>
        </And>
    </Where>
</Query>

如果您想要更多变量,则需要进行更多嵌套。玩得开心。

答案 2 :(得分:0)

我认为不等于选项是构建此CAML查询的最佳方式

也许这个(没有测试过,所以请耐心等待)

<Query>
   <Where>
     <And>
       <Neq>
          <FieldRef Name="ID" /><Value Type="Counter">1</Value>
       </Neq>
       <Neq>
          <FieldRef Name="ID" /><Value Type="Counter">2</Value>
       </Neq>
       <Neq>
          <FieldRef Name="ID" /><Value Type="Counter">3</Value>
       </Neq>
     </And>
   </Where>
</Query>

您应该查看可用的比较运算符

  • 包含
  • BeginsWith
  • Eq,Equal
  • Neq,不等于
  • Gt,大于
  • Lt,小于
  • Geq,大于或等于
  • Leq,小于或等于
  • DateRangesOverlap,比较指定的周期性事件中的日期 值
  • IsNotNull
  • ISNULL

答案 3 :(得分:0)

我最接近的是使用<NotIncludes></NotIncludes>,但由于某种原因,它与<In></In>的工作方式不同。在<In>我可以使用<Values>。使用<NotIncludes>,您似乎只能指定一个值。剩下的内容必须<Or>,类似于<Neq>