我可以在SitecoreQuery属性中使用相对快速查询吗?

时间:2014-01-24 11:13:01

标签: c# sitecore sitecore7 glass-mapper

我正在安装Sitecore 7 + Glass Mapper 3,我希望对其进行优化。

我的代码示例是:

[SitecoreQuery(".//*[@@templateid = '{011EC776-D9F3-4D73-8D8D-E454417E7574}']", 
                                                               IsRelative = true)]
IEnumerable<ItineraryLine> Itinerary { get; set; }

我希望使用FastQuery,但我收到错误:

  

预期在第4位的字符串结尾

我给了following solution a try这涉及到getLookupSourceItems管道的插入 - 但我不认为这是正确的管道,因为它不会在调试中触发。

在这种情况下,Glass会使用另一个管道(如果有的话)吗?有没有不同的方法可以解决我加快这个目标的目标?

如果我没有使用属性而是使用扩展方法,我可以手动执行此操作并使用*[@@id='']来设置根节点,但我希望尽可能避免这种情况。

1 个答案:

答案 0 :(得分:7)

当使用IsRelative设置为true时,GMS会通过Axes SelectItem推送查询。 Sitecore不允许快速查询Axes选择,例如:

Item.Axes.SelectItems("fast:./*");

请参阅第3页的文档:

http://www.iosh.co.uk/~/media/using%20sitecore%20fast%20query001.ashx

然而,GMS非常棒让我们能够以另一种方式解决这个问题,您可以在GMS将扩展的查询中添加占位符。删除IsRelative属性并使用{path} 占位符允许相同的结果:

[SitecoreQuery("fast:{path}//*[@@templateid = '{011EC776-D9F3-4D73-8D8D-E454417E7574}']")]
IEnumerable<ItineraryLine> Itinerary { get; set; }

路径占位符将扩展到正在映射的当前项的完整路径。