2012-07-20 94 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> 

如果你想要更多的變量,那麼需要做更多的嵌套。玩的開心。