Запрос Sitecore, где поле является самостоятельным

В анализаторе запросов я могу выполнить следующий запрос, который дает желаемый результат:

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

Когда я пытаюсь выполнить следующий запрос sitecore с помощью Glass Mapper в моей модели Department, я не получаю никаких результатов.

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

В целях тестирования я удалил and @Department='{38c76731-f18a-4d29-9d52-33fdb3329881}' из приведенного выше запроса, который возвращает все ActionArticle.

В конечном итоге я хотел бы иметь возможность ссылаться на текущую модель Department в запросе. Что-то в этом роде:

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

Конечно, this недоступен в приведенном выше контексте, поэтому я в недоумении...

Возможно ли это, и если да, то как мне добиться такого?


person kjmagic13    schedule 18.08.2016    source источник
comment
Это возможно за счет использования гибкого сопоставления и делегатов, но опасно опасно при любом использовании Sitecore Query, не говоря уже о рекурсивных запросах Sitecore. Это будет работать ужасно, особенно под нагрузкой. Можете ли вы сделать это с помощью поискового индекса?   -  person nickwesselman    schedule 18.08.2016


Ответы (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);
    }
}
person kjmagic13    schedule 18.08.2016