CAML中“不包含”?

时间:2008-12-04 15:42:44

标签: sharepoint caml listitem

CAML我可以使用“包含”元素查询SharePoint列表项,但是没有“不包含” - 我可以使用的元素。

那么获取不包含字符串的项目的最佳方法是什么?有没有比循环遍历每个项目更好的方法?

5 个答案:

答案 0 :(得分:4)

相同的限制适用于BeginWith。我遗憾地不知道任何好的解决方案。您可以做什么:执行Contains-Query,遍历每个项目并获取ID,然后对“ID NotEqual 1或ID NotEqual 2或ID NotEqual 3 ......”执行另一个大查询,因为ID被索引为据我所知,这应该会对数据库产生较小的影响,但它仍然闻起来很糟糕。

对于小列表并不重要,对于较大的列表,我会使用SQL Server Profiler来查看其影响。

答案 1 :(得分:3)

  

那么最好的方法是什么?   不包含字符串的项目?

尝试使用计算列通过创建相反的值来反映您正在查看的值。

例如,该列称为 IsCritical 。然后,将列添加为“是/否”,将公式添加为

=ISNUMBER(FIND("Critical"), [Title])

然后在您的CAML查询中

<Query>
<Where>
   <Eq>
     <FieldRef Name='IsCritical'/>
     <Value Type='Boolean'>0</Value>
   </Eq>
</Where>
</Query>

此查询中的0表示“不严重”。但是我不确定性能可能是什么,而不是有一个本地CAML“Not Containts”,遗憾的是不存在。

另见CAML Query Schema at MSDN

答案 2 :(得分:0)

'Contains'和'BeginsWith'这个问题也困扰着我。我希望下一版本的Sharepoint caml能够扩展为真正的工具,而不仅仅是我们腿上的一块石头。

我这样做的方法是尽可能多地指定查询,然后过滤与C#代码中的条件不匹配的行。它有时非常丑陋,因为有时您必须处理100行以结束与条件匹配的1个结果。

答案 3 :(得分:0)

@drax:让我们希望CAML消失 - 期间。这绝对是当前SP编程中最糟糕的一个方面。

答案 4 :(得分:0)

不包括

<NotIncludes>
<FieldRef Name='FileLeafRef' />
                                            <Value Type='Text'>stringvalue</Value>
                                        </NotIncludes>