在CAML我可以查询SharePoint Listitems使用“包含”元素,但没有“不包含”我可以使用的元素。“不包含”CAML中?
那么获取不包含字符串的项目的最佳方法是什么?有没有更好的方法,而不是遍历每一个项目?
在CAML我可以查询SharePoint Listitems使用“包含”元素,但没有“不包含”我可以使用的元素。“不包含”CAML中?
那么获取不包含字符串的项目的最佳方法是什么?有没有更好的方法,而不是遍历每一个项目?
BeginWith也适用同样的限制。我不知道有什么好的解决办法。你可以做什么:做一个Contains-Query,遍历每个项目并获取ID,然后为“ID NotEqual 1或ID NotEqual 2或ID NotEqual 3 ......”做另一个大查询。由于ID被索引为据我所知,这对数据库应该有一个较小的影响,但它仍然闻起来真的很糟糕。
对于小列表无关紧要,对于较大的列表,我会使用SQL Server Profiler来查看影响是什么。
'Contains'和'BeginsWith'的问题也困扰我。我希望在下一个版本的SharePoint中,caml将被扩展为真正的工具,而不仅仅是我们的腿。
我这样做的方式是尽可能指定查询,然后筛选与C#代码中的条件不匹配的行。这有时候非常难看,因为有时你必须处理100行,并以符合条件的1个结果结束。
@drax:让我们希望CAML消失 - 期间。这绝对是当前SP编程最糟糕的一个方面。
那么得到不包含字符串的 项目的最佳方法是什么?
尝试使用计算列来反映您通过创建相反值所查看的值。
例如,说该列被称为IsCritical。那么,作为 “YES/NO” 和公式加列
=ISNUMBER(FIND("Critical"), [Title]))
然后在你的CAML查询
<Query>
<Where>
<Eq>
<FieldRef Name='IsCritical'/>
<Value Type='Boolean'>0</Value>
</Eq>
</Where>
</Query>
A 0在此查询还挺体现 “并不重要”。然而,我不确定可能会有什么表现,而不是有一个原生的CAML“Not Containts”,不幸的是它不存在。
尽量不包括
<NotIncludes>
<FieldRef Name='FileLeafRef' />
<Value Type='Text'>stringvalue</Value>
</NotIncludes>
它闻起来真的不好,你有没有尝试过,除了查询的其他部分使用计算列? – 2010-03-04 21:28:23
@AlexanderN例如,如果您正在筛选Created字段或其他属于内容类型一部分的字段(这些字段在列列表中看起来不可用),则计算列并不总是有效。 – 2010-03-04 21:35:08