在sitecore中使用快速查询获取所有子项和子项

时间:2014-02-27 04:10:59

标签: sitecore sitecore7

在sitecore我想得到继承形式“工业产品”的所有孩子和大孩子 模板。

以下是快速查询,但它给出错误 错误:预期在第5位的字符串结尾。

快速查询:

_masterdb.SelectItems("query:/sitecore/content/Product Catalog/Industrial/Products/*[@@templatename='Industrial Product']")

4 个答案:

答案 0 :(得分:6)

这不是快速查询,您使用的是普通查询。 请使用类似的内容:

Sitecore.Data.Items.Item[] items = 
 database.SelectItems("fast:/sitecore/content/Product Catalog/Industrial/Products//*[@@templateid='yourTemplateId']"); 

另外请使用@@ templateid而不是@@ templatename,我做了一些测试,使用@@ templateid更快。

还要看看有关使用FastQuery的here

答案 1 :(得分:6)

您的查询不是快速查询,如果您使用以下查询,它对我有用:

_masterdb.SelectItems("fast:/sitecore/content/Product Catalog/Industrial/Products//*[@@templatename='Industrial Product']");

此查询中有两处更改:

  • 将开头的关键字query替换为fast。这意味着它不是“普通”Sitecore查询,它成为Sitecore快速查询。有关使用快速查询的更多信息,请阅读this guide
  • 在使用*[@@templatename='Industrial Product']选择项目之前,我添加了一个双斜杠//。这意味着,它使用您的模板对所有项目进行递归搜索。使用您的查询,您只搜索直接子项。

此外,我建议您使用关键字@@templateid代替@@templatename,因为sitecore climber表示它更快,如果您重命名模板也没问题。因此,您的查询最终可能如下所示:

fast:/sitecore/content/Product Catalog/Industrial/Products//*[@@templateid='{76036F5E-CBCE-46D1-AF0A-4143F9B557AA}']

注意:这不仅选择您的孩子和大孩子。这会以递归方式为您提供包含此模板的所有项目。

答案 2 :(得分:2)

请使用以下查询

_masterdb.SelectItems(&#34; query:/ sitecore / content / #Product Catalog#/ Industrial / Products // * [@@ templatename =&#39; Industrial Product&#39;]&#34;)< / p>

答案 3 :(得分:0)

试试这个

_masterdb.SelectItems("fast:/sitecore/content/#Product Catalog#/Industrial/Products//*[@@templatename='Industrial Product']")

_masterdb.SelectItems("fast:/sitecore/content/#Product Catalog#/Industrial/Products//*[@@templatename='industrial product']")

在某些情况下,您可能需要转义包含空格的名称,例如@#Updated by#。