2012-03-16 33 views
3

我在查詢列表並獲取與通訊列表相匹配的時事通訊文章。在Sharepoint CAML中出現OR的問題

試圖通過CAML拉項目時會遇到麻煩。如果我用兩個CONTAINS做OR循環,它效果很好。例如:

<Where> 
    <Or> 
    <Contains> 
     <FieldRef Name=\"Newsletter_x0020_Name\"/> 
     <Value Type=\"Lookup\">April 2012</Value> 
    </Contains> 
    <Contains> 
     <FieldRef Name=\"Newsletter_x0020_Name\"/> 
     <Value Type=\"Lookup\">May 2012</Value> 
    </Contains> 
    </Or> 
</Where> 

很好用!

添加在第三行,我們有麻煩了:

<Where> 
    <Or> 
    <Contains> 
     <FieldRef Name=\"Newsletter_x0020_Name\"/> 
     <Value Type=\"Lookup\">April 2012</Value> 
    </Contains> 
    <Contains> 
     <FieldRef Name=\"Newsletter_x0020_Name\"/> 
     <Value Type=\"Lookup\">May 2012</Value> 
    </Contains> 
    <Contains> 
     <FieldRef Name=\"Newsletter_x0020_Name\"/> 
     <Value Type=\"Lookup\">June 2012</Value> 
    </Contains> 
    </Or> 
</Where> 

我確信它是不是這個名字列中的參數(意思是我已經試過各種組合可以四月,五月和六月在兩個參數和三個參數實現中),而且沒有任何變化。我可以使用任何一組參數,並且兩列始終有效,三次總是失敗。

幫助?

回答

4

我這裏學到了艱辛的道路,以及 - CAML分組<And><Or>only work in pairs來表達布爾邏輯。

聰明的一點(或討厭的,取決於你如何看待它)是這些分組也作爲條件自己工作。所以在這種情況下,它應該是這樣的:

<Or> 
    <Or> 
     <Condition1/> 
     <Condition2/> 
    </Or> 
    <Condition3/> 
</Or> 

在上面的例子中,我們都在說「要麼這個表達式爲true,或Condition3是真的」;第一個表達式碰巧也有一個子表達式,它被評估並冒泡表示單個布爾值。

如果您最終在您的應用程序中編寫了許多複雜的查詢,我強烈建議將其隱藏在API或像LINQ這樣的好的對象模型後面,因爲XML手工編寫起來非常麻煩,而且易於使用搞砸了。