在后面的代码中使用工作Sitecore查询

时间:2011-01-26 14:22:06

标签: c# sitecore sitecore6

我一直在努力使用此Sitecore查询代码。发布所有项目,查询在XPath Builder中工作,但它总是在后面的代码中返回0结果。我从没有其他人抱怨的代码示例中复制了这个,但仍然没有得到任何结果。我尝试使用“query:”附加,但它会引发语法错误。

string query = "/sitecore/content/ShrinersHospital2/CareAndTreatment//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']"; 

Item[] items = Sitecore.Context.Database.SelectItems(query); 

2 个答案:

答案 0 :(得分:5)

此特定问题与发布问题有关。查询的项目修改了模板,增量发布无法正确推送更改。智能发布使代码开始工作。

我还被告知,当发生类似这样的事情时,我应该使用以下代码在两个数据库上进行测试:

Database master = Factory.GetDatabase("master"); 
master.SelectItems(query); 

Database web = Factory.GetDatabase("web"); 
web.SelectItems(query); 

答案 1 :(得分:3)

我遇到了同样的问题并找到了以下解决方案:

   Item[] items = Sitecore.Context.Database.SelectItems(query);

由于您的代码在(当前)上下文中执行,因此无法正常工作。代码在路径中执行

  

/ Sitecore的/内容/ ShrinersHospital2 / CareAndTreatment

通过上面的查询,您可以告诉sitecore从路径

进行搜索
  

/ Sitecore的/内容/ ShrinersHospital2 / CareAndTreatment / Sitecore的/内容/ ShrinersHospital2 / CareAndTreatment

将返回0项作为结果,因为该路径不存在。

尝试以下查询:

string query = "//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']"; 
Item[] items = Sitecore.Context.Database.SelectItems(query);

当您将数据库切换到" web"时,您没有上下文,并且您的"开始"路径是/。然后下面的代码返回带有查询的项目,因为路径存在

  

/ sitecore / content / ShrinersHospital2 / CareAndTreatment

string query = "/sitecore/content/ShrinersHospital2/CareAndTreatment//*[@@templatename = 'CareAndTreatmentType' and @TreatmentType = '{ECDBE944-99DE-4347-8FA2-6613FA85402C}']"; 
var database = Sitecore.Configuration.Factory.GetDatabase("web");
items = database.SelectItems(query);