2012-07-20 92 views
7

有没有办法在SharePoint 2010中执行诸如“NOT IN”行为之类的操作?我可以很容易地实现这样的行为:CAML“NOT 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> 

但是,有没有办法选择所有不枚举值的数值?

这里是用例:我有AllowMultipleValues = true的查找领域,我需要从LookupList的所有项目,未纳入查找场提前

谢谢!

回答

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
  • 当量,等于
  • NEQ,不等于
  • 亿吨,大于
  • LT,小于
  • GEQ,大于或等于
  • 当量,小于或等于
  • DateRangesOverlap,比较经常性活动的日期与指定 值
  • IsNotNull
  • ISNULL
+4

我不认为CAML是有效的 - 你不能有超过2个孩子和AND IIRC。 – Ryan 2012-07-21 12:28:14

+0

好吧,我会进行一些测试,并在完成后返回结果! – 2012-07-21 12:34:19

+0

谢谢大家的回答,但在使用的情况下,当可能的变体数超过10(例如)时,查询会变得有点难看,顺便说一下,我现在使用逻辑解决了这个问题,但我认为如果能够以某种方式实现逻辑将会很棒...... – debug 2012-07-22 21:09:41

0

我最近来的是使用<NotIncludes></NotIncludes>,但由于某种原因,它的工作方式与<In></In>不一样。在<In>我可以使用<Values>。与<NotIncludes>它看起来像你只能指定一个值。其余的必须是<Or>,类似于<Neq>

2

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

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

模板:

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

要获得 '在' 相反的行为,你必须做出一个嵌套的 '非等效' 查询。如果您使用多个值处理Lookup字段,则可以使用'NotIncludes'替代'Neq'或将其与'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> 

如果你想要更多的变量,那么需要做更多的嵌套。玩的开心。