2013-04-15 3 views
0

У меня есть структура элемента, которая не соответствует «документам» в стандартном смысле Sitecore. Это соответствует элементам данных.Sitecore: Следуйте реляционным ссылкам в Sitecore Query

Одним из отношений, которые мои детали имеют следующий:

Person -> State -> Country 

Если лицо имеет поле ссылки на государства и государства имеют ссылочные поля в страну.

Мой вопрос: как написать запрос для извлечения всех людей, которые имеют возможную ссылку на страну определенной аббревиатуры?

Я в тупике, как это сделать в Sitecore Query. Мое текущее решение использует LINQ и несколько запросов.

ответ

1

Предполагая, что ссылки между этими элементами, созданные с использованием поля Reference, такие как Droplink, Treelist, Droptree и т. Д., Вы можете перемещать ссылки/источники, используя базу данных Sitecore Links.

Ниже приведен пример (непроверенный), который начинается с позиции страны и выбирает любые ссылочные состояния. Тот же запрос выполняется в состояниях для извлечения любых ссылочных людей. Результаты добавляются в общую коллекцию List<Item>.

List<Item> peopleList = new List<Item>(); 

var countryReferences = Globals.LinkDatabase.GetReferences(countryItem); 
var referringStates = countryReferences.Select(c => c.GetTargetItem()).Where(c => c.Template.Key == "state"); 
foreach (var state in referringStates) 
{ 
    var stateReferences = Globals.LinkDatabase.GetReferences(state); 
    var referringPeople = stateReferences.Select(s => s.GetTargetItem()).Where(s => s.Template.Key == "person"); 
    foreach (var person in referringPeople) 
    { 
     peopleList.Add(person); 
    } 
} 
+0

Я не знал о базе данных Links. Это делает мою жизнь намного проще. –

+0

Следующим этапом, может ли эта структура использоваться на языке запросов Sitecore? –

+0

«Globals.LinkDatabase» - единственная точка доступа к базе данных ссылок, о которой я знаю. Есть ли конкретная причина, по которой вы ограничены использованием Sitecore Query? –

Смежные вопросы