2017-01-31 2 views
1

Кажется, что это должно быть легко. Возможно, это так, и я просто переусердствовал. У меня есть куча предметов, которые имеют поле категории, установленное через DropLink. Я хочу захватить все элементы, соответствующие одному из этих параметров. Например, возьмите список всех элементов, где Category = Brochure. Кажется, мне не кажется, что идентификатор параметра Droplink соответствует параметру Category для самого элемента.Получить все элементы, соответствующие опции DropLink в Sitecore

EDIT: Включенный текущий код по запросу.

public List<PoolDownload> Manuals 
     { 
      get 
      { 
       LookupField cat = (LookupField)this.Item.Fields["Category"]; 
       return this.Downloads.Where(i => (i.Item.TemplateID == PoolDownload.TemplateId) && 
             (i.Item.GlassCast<Pdp.Pool.Website.Business.Entities.PoolDownload>().Category.ToString() == cat.TargetID.ToString())) 
             .ToList(); 
      } 
     } 
+1

Опубликуйте свой код, чтобы показать, что вы пробовали до сих пор. – haliphax

+0

Каков тип свойства Category? – DougCouto

+0

@Barbosa Поле Category - это поле DropLink. – timT

ответ

1

Я считаю, что проблема в том, что вы сравниваете Guid.ToString() к Sitecore.Data.ID.ToString(). Эти два утверждения возвращают разные значения:

var guidToString = Sitecore.Context.Item.ID.Guid.ToString(); 
// "2a6a1d9a-be1d-411b-821a-7e63775280b3" 

var idToString = Sitecore.Context.Item.ID.ToString(); 
// "{2A6A1D9A-BE1D-411B-821A-7E63775280B3}" 

В ролях TargetID к Guid, а также и вы должны быть хорошо.

И ответить на ваш вопрос в своем комментарии ниже об отображении «Загрузка элементов», сгруппированных по категориям, вы можете использовать метод GroupBy, https://msdn.microsoft.com/en-us/library/bb534304(v=vs.110).aspx так:

public IEnumerable<IGrouping<Guid, PoolDownload>> Manuals 
{ 
    get 
    { 
     LookupField cat = (LookupField)this.Item.Fields["Category"]; 

     return this.Downloads.Where(i => 
      i.Item.TemplateID == PoolDownload.TemplateId 
      && i.Item.GlassCast<Pdp.Pool.Website.Business.Entities.PoolDownload>().Category.ToString() == cat.TargetID.Guid.ToString()) 
      .GroupBy(i => i.Category); 
    } 
} 

, а затем, чтобы перебрать результаты в новой статье «Руководства» вы можете сделать примерно следующее:

foreach(var categoryGroup in Manuals) 
{ 
    var categoryGuid = categoryGroup.Key; 

    foreach(var download in categoryGroup) 
    { 
     var downloadInCurrentGroup = download.Item; 
    } 
} 
+0

Спасибо, @Barbosa! Это помогает мне сопоставлять идентификаторы. Любая идея, как захватить идентификатор опции, которую я тестирую? – timT

+0

Нет проблем. Где вы устанавливаете опцию, с которой вы тестируете? Является ли это жестко закодированным в вашем коде? Это поле на странице? Это поле в элементе данных? Как автор контента выбирает категорию для начала? – DougCouto

+0

У меня есть «загружаемые элементы», у которых есть поле droplink, которое автор контента использует для установки категории. Это варианты, которые я хочу проверить (Manual, Brochure и т. Д.). Затем элементы загрузки связаны с элементами продукта через поле «Загрузка» в шаблоне продукта. Продукт может иметь несколько связанных с ним элементов загрузки. То, что я пытаюсь в конечном счете сделать, это отобразить все элементы загрузки для продукта, сгруппированные по их категории. – timT

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