2012-12-27 109 views
3

我正在使用Tridion.ContentDelivery.DynamicContent.Query。 我試圖過濾組件,並在分類關鍵字排除其中的一些,我的代碼:Tridion查詢:根據關鍵字列表篩選/排除組件

List<Criteria> excludeCriteria = new List<Criteria>(); 
foreach (string keywordUri in excludeKeywords) 
{ 
    excludeCriteria.Add(new TaxonomyKeywordCriteria(categoryUri, keywordUri, false));         
} 
Criteria criteria = new NotInCriteria(new AndCriteria(excludeCriteria.ToArray()))); 
Query query = new Query(criteria); 

的問題是,在結果我有,只有TaxonomyKeywordCriteria的一個過濾列表。 excludeKeywords列表中的第一個條件被應用,其他所有條件都被忽略。

+0

嗨@Vitaliy。你可以打開TRACE日誌記錄,重新啓動你的webApp,加載你的頁面,並檢查爲你的BrokerQuery創建了哪些JPQL查詢?您應該能夠看到類似以下的條目:「TRACE JPAQueryDAO - 生成代理查詢:」。請複製/粘貼它以查看更多正在發生的事情。 –

回答

2

我不完全確定,但我有一種感覺,當你像這樣添加Criteria時,你以某種方式得到一個OR列表(你可以檢查代理的調試日誌,應該在那裏執行查詢)。

你可以嘗試一下嗎?將TaxonomyKeywordCriteria包裝在NotInCriteria中並將它們添加到AndCriteria中?所以像這樣:

List<Criteria> excludeCriteria = new List<Criteria>(); 
foreach (string keywordUri in excludeKeywords) 
{ 
    excludeCriteria.Add(new NotInCriteria(new TaxonomyKeywordCriteria(categoryUri, keywordUri, false)));         
} 
Criteria criteria = new AndCriteria(excludeCriteria.ToArray())); 
Query query = new Query(criteria); 
+0

在這種情況下,僅應用excludeKeywords列表中的最後一個條件。 – beardeddev

+0

然後確實去@sea_gull建議的跟蹤,並給我們一些更多的信息來處理 –