在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