有没有办法在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字段中
提前致谢!
答案 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>
您应该查看可用的比较运算符
答案 3 :(得分:0)
我最接近的是使用<NotIncludes></NotIncludes>
,但由于某种原因,它与<In></In>
的工作方式不同。在<In>
我可以使用<Values>
。使用<NotIncludes>
,您似乎只能指定一个值。剩下的内容必须<Or>
,类似于<Neq>
。