8

CAML中,我可以使用“包含”元素查询 SharePoint Listitems,但没有可以使用的“不包含”元素。

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

4

5 回答 5

4

同样的限制适用于 BeginWith。可悲的是,我不知道有什么好的解决方案。你可以做什么:做一个包含查询,遍历每个项目并获取 ID,然后对“ID NotEqual 1 or ID NotEqual 2 or ID NotEqual 3......”进行另一个大查询,因为 ID 被索引为据我所知,这对数据库的影响应该较小,但它仍然闻起来很糟糕。

对于小列表没关系,对于较大的列表,我会使用 SQL Server Profiler 来查看影响是什么。

于 2008-12-04T16:07:02.970 回答
3

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

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

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

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

然后在您的 CAML 查询中

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

此查询中的 0 有点反映“不是关键”。但是,我不确定与不幸不存在的本地 CAML“不包含”相比,性能可能是什么。

另请参阅MSDN 上的 CAML 查询架构

于 2010-03-04T20:42:59.843 回答
0

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

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

于 2008-12-04T20:28:30.523 回答
0

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

于 2008-12-04T22:14:34.897 回答
0

TRy 不包括

<NotIncludes>
<FieldRef Name='FileLeafRef' />
                                            <Value Type='Text'>stringvalue</Value>
                                        </NotIncludes>
于 2015-08-18T15:38:30.017 回答