【问题标题】:Sitecore Query where field is selfSitecore 查询字段为 self
【发布时间】:2016-08-18 15:32:18
【问题描述】:

在查询分析器中,我可以执行以下查询,产生我想要的结果:

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

当我在 Department 模型中使用 Glass Mapper 尝试以下站点核心查询时,我没有得到任何结果。

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

出于测试目的,我从上面返回所有ActionArticles 的查询中删除了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在上述情况下是不可用的,所以我很茫然...

这可能吗?如果可以,我将如何实现这样的目标?

【问题讨论】:

  • 这可能通过使用流畅的映射和委托来实现,但是对于 Sitecore 查询的任何使用,danger danger,更不用说递归 Sitecore 查询了。这将非常糟糕,尤其是在负载下。你可以用搜索索引来代替吗?

标签: asp.net-mvc sitecore sitecore8 sitecore-mvc glass-mapper


【解决方案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);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多