在CAML我可以使用“包含”元素查询SharePoint列表项,但是没有“不包含” - 我可以使用的元素。
那么获取不包含字符串的项目的最佳方法是什么?有没有比循环遍历每个项目更好的方法?
答案 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”,遗憾的是不存在。
答案 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>