CAML“不在”查询
Posted
技术标签:
【中文标题】CAML“不在”查询【英文标题】:CAML "NOT IN" query 【发布时间】:2012-07-20 13:30:29 【问题描述】:有没有办法在 SharePoint 2010 中执行类似“不在”行为的操作?我可以轻松地实现这样的 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>
但是有没有办法选择所有不在 Values 枚举中的值?
这是用例:我有一个 AllowMultipleValues = true 的 Lookup 字段,我需要从 LookupList 中获取所有项目,这些项目不包含在 Lookup 字段中
提前致谢!
【问题讨论】:
【参考方案1】:从 SharePoint 2010 开始,NotIncludes
元素可能适合您。来自 MSDN:
如果指定字段是允许多个值的查找字段,则指定从由 FieldRef 元素指定的字段的列表项中排除 Value 元素。
模板:
<NotIncludes>
<FieldRef Name="Field_Name" />
<Value Type="Field_Type" />
<XML />
</NotIncludes>
More reading: NotIncludes Element
【讨论】:
【参考方案2】:要获得与“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>
如果您想要更多变量,则需要进行更多嵌套。玩得开心。
【讨论】:
【参考方案3】:我最接近的是使用<NotIncludes></NotIncludes>
,但由于某种原因,它与<In></In>
的工作方式不同。在<In>
我可以使用<Values>
。使用<NotIncludes>
,您似乎只能指定一个值。其余的必须是<Or>
,类似于<Neq>
。
【讨论】:
【参考方案4】:我认为不相等选项将是构建此 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>
你应该看看可用的比较运算符
包含 开始于 等式,等式 不等于,不等于 Gt,大于 Lt,小于 Geq,大于或等于 Leq,小于或等于 DateRangesOverlap,将重复事件中的日期与指定的日期进行比较 价值 IsNotNull 为空【讨论】:
我不认为 CAML 是有效的 - 在 AND IIRC 下你不能有超过 2 个孩子。 好的,我会进行一些测试,完成后返回结果! 谢谢大家的回答,但是如果使用 运算符,当可能的变体数量超过 10 个(例如)时,查询会变得有点难看,顺便说一下,我目前已经使用 逻辑解决了这个问题,但我认为如果能够以某种方式实现以上是关于CAML“不在”查询的主要内容,如果未能解决你的问题,请参考以下文章