CAML "NOT IN" query
Is there a way to do something like "NOT IN" behavior in SharePoint 2010? I can easily implement IN behavior like that:
<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>
But is there a way to select all the values that DOES NOT IN Values enumeration?
Here is the USE CASE: I have a Lookup field with AllowMultipleValues = true, and I need to get all items from LookupList, which are not included into Lookup field
Thanks in advance!
Starting from SharePoint 2010, there's the NotIncludes
element that might work for you. From MSDN:
If the specified field is a Lookup field that allows multiple values, specifies that the Value element is excluded from the list item for the field that is specified by the FieldRef element.
Template:
<NotIncludes>
<FieldRef Name="Field_Name" />
<Value Type="Field_Type" />
<XML />
</NotIncludes>
To get the opposite behavior of 'In', you have to make a nested 'Neq' query. 'NotIncludes' could be substituted for or combined with 'Neq' if you are dealing with a Lookup Field with multiple values .
<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>
If you want more variables then more nesting needs to be done. Have fun.
I think the Not equal option would be the best way to build this CAML query
Maybe this (didn't test this, so bare with me)
<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>
You should have a look at the available Comparison Operators
上一篇: Array.prototype vs [] perf
下一篇: CAML“NOT IN”查询