2013-02-20 64 views
1

我已经在我的C#代码中使用Sitecore快速查询来获取与条件匹配的项目和子项目。但快速查询不会返回任何项目,尽管有。Sitecore快速查询不返回值

我的快速查询如下所示; fast:/sitecore/content/...//*[@__Workflow state='{item id}']

这将不返回任何项目,但从查询中删除fast:将通过花费更多时间返回项目。

我试图在查询路径中转义空格,就像下面一样,但它没有奏效; fast:/sitecore/content/...//*[@#__Workflow state#='{item id}']

有没有什么办法通过使用快速查询获得子项目的筛选?

+0

在您的前端使用快速查询时要小心。根据我的经验,即使在构建Item缓存时,快速查询也总是会触发数据库。我发现用通过树例如Sitecore.Context.Item.GetChildren()进行的常规查询替代快速查询的速度要快得多,因为在它执行一次查询之后,它运行的以下时间是针对项目缓存的,而相同的不管项目缓存如何,快速查询usim总是碰到数据库。 – DougCouto 2013-02-21 01:49:27

回答

0

我注意到你在查询中使用了这个点,这是不正确的。您可以使用2个点来处理父项,但在查询中选择来自/sitecore/content的父项似乎有点奇怪。

看来你可以用这个查询做:

fast:/sitecore/content//*[@__Workflow state='{item id}'] 

又见this document的语法和示例,并使用快速查询,而不是正常的查询的局限性

编辑:

Sitecore的快速查询不考虑上下文语言(结果包括版本与任何语言的查询匹配的项目)。我只是在Sitecore的开发人员中心做了一个快速测试,在我的情况下,它只产生一个工作流状态设置为英语的项目,而不是我当前的上下文语言。这可能是你在你的情况下遇到的事情。

+0

添加了三个点来隐藏此线程的实际路径。我知道确切的项目开始查询。 – 2013-02-20 13:22:34

+0

好的,最好不要在将来这样做,它会给那些想回答你的问题的人一个错误的想法。 Sitecore快速查询在使用againt标准查询时存在一些限制。我很确定是否允许@__Workflow状态 – 2013-02-20 13:28:12

+0

刚做了一个编辑。 – 2013-02-20 14:20:11