2016-08-18 22 views
0

在Query Analyzer我能执行以下查询产生我想要的结果:Sitecore的查询,其中场是自

select * from /sitecore/content/Home//*[@@templatekey='action' and @Department='{38c76731-f18a-4d29-9d52-33fdb3329881}']

当我试图在我的Department模型中使用玻璃映射以下Sitecore的查询我没有得到任何结果。

[SitecoreQuery("/sitecore/content/Home//*[@@templatekey='action' and @Department='{38c76731-f18a-4d29-9d52-33fdb3329881}']", IsRelative = false)] 
public virtual IEnumerable<ActionArticle> TestServices { get; set; } 

出于测试目的,我从上面返回所有ActionArticle S上的查询中删除and @Department='{38c76731-f18a-4d29-9d52-33fdb3329881}'

最终我希望能够在查询中引用当前的Department模型。沿此线的东西:

[SitecoreQuery("/sitecore/content/Home//*[@@templatekey='action' and @Department='"+ this.Id +"']", IsRelative = false)] 
public virtual IEnumerable<ActionArticle> TestServices { get; set; } 

当然this的是不是在上述背景下可用的,所以我在亏损...

这是可能的,如果是我会怎样实现这样的事情?

+2

可能通过使用流畅的映射和委托,但*危险* *危险*任何使用Sitecore查询,更不用说递归Sitecore查询。这将会表现糟糕,特别是在负载下。你可以用搜索索引来做到这一点吗? – techphoria414

回答

1

我能够用以下方法得到我想要的结果,但它似乎并不是最有效的方法。

// ActionArticle model 

[SitecoreField("Department")] 
public virtual Guid Department { get; set; } 

// Department model 

[SitecoreId] 
public virtual Guid Id { get; set; } 

[SitecoreQuery("/sitecore/content/Home//*[@@templatekey='action']", IsRelative = false)] 
private IEnumerable<ActionArticle> AllServices { get; set; } 

public virtual IEnumerable<ActionArticle> Services 
{ 
    get 
    { 
     return this.AllServices.Where(x => x.Department == this.Id); 
    } 
}