在CAML中,我可以使用“包含”元素查询 SharePoint Listitems,但没有可以使用的“不包含”元素。
那么获取不包含字符串的项目的最佳方法是什么?有没有比遍历每个项目更好的方法?
在CAML中,我可以使用“包含”元素查询 SharePoint Listitems,但没有可以使用的“不包含”元素。
那么获取不包含字符串的项目的最佳方法是什么?有没有比遍历每个项目更好的方法?
同样的限制适用于 BeginWith。可悲的是,我不知道有什么好的解决方案。你可以做什么:做一个包含查询,遍历每个项目并获取 ID,然后对“ID NotEqual 1 or ID NotEqual 2 or ID NotEqual 3......”进行另一个大查询,因为 ID 被索引为据我所知,这对数据库的影响应该较小,但它仍然闻起来很糟糕。
对于小列表没关系,对于较大的列表,我会使用 SQL Server Profiler 来查看影响是什么。
那么获取不包含字符串的项目的最佳方法是什么?
尝试通过创建相反的值来使用计算列来反映您正在查看的值。
例如,假设列名为IsCritical。然后,将该列添加为“是/否”,并将公式添加为
=ISNUMBER(FIND("Critical"), [Title])
然后在您的 CAML 查询中
<Query>
<Where>
<Eq>
<FieldRef Name='IsCritical'/>
<Value Type='Boolean'>0</Value>
</Eq>
</Where>
</Query>
此查询中的 0 有点反映“不是关键”。但是,我不确定与不幸不存在的本地 CAML“不包含”相比,性能可能是什么。
'Contains' 和 'BeginsWith' 的这个问题也困扰着我。我希望在下一版本的 Sharepoint 中,caml 将被扩展为真正的工具,而不仅仅是我们腿上的一块石头。
我这样做的方法是尽可能指定查询,然后过滤与 C# 代码中的条件不匹配的行。有时它非常难看,因为您有时必须处理 100 行才能以 1 个匹配条件的结果结束。
@drax:让我们希望 CAML 消失 - 期间。这绝对是当前 SP 编程最糟糕的方面之一。
TRy 不包括
<NotIncludes>
<FieldRef Name='FileLeafRef' />
<Value Type='Text'>stringvalue</Value>
</NotIncludes>