API de búsqueda con múltiples condiciones
Oct 09 2020
Sitecore 9.3
Lo que tengo hasta ahora:
Puedo filtrar elementos basados en una plantilla usando el contexto de búsqueda.
var unversionedImageTemplateId = ID.Parse(Constants.UnversionedImageTemplateId);
var jpegTemplateId = ID.Parse(Constants.Jpeg);
var results = context.GetQueryable<SearchResultItem>()
.Where(x => x.TemplateId == unversionedImageTemplateId || x.TemplateId == jpegTemplateId)
Lo que estoy tratando de hacer:
Quiero poner una condición más basada en el valor de un campo, una casilla de verificación.
Lo que probé:
- Intenté usar
.Wheredespués del código que tengo. - Intenté aplicar la condición usando
&&el mismoWherecomando.
Pero siempre obtengo el siguiente error.
Exception: System.NotSupportedException
Message: The method 'get_Item' is not supported.
Source: Sitecore.ContentSearch.Linq
¿Alguna idea de cómo seguir adelante?
Respuestas
2 VladIobagiu Oct 08 2020 at 23:45
Debe utilizar el generador de predicados para crear su consulta. Tendrás algo como:
var predicate = PredicateBuilder.True<SearchResultItem>();
predicate = predicate.And<SearchResultItem>(i => i.TemplateId == [Template ID]);
#Get items under specific node or Items from specific location in Sitecore –
predicate = predicate.And<SearchResultItem>(i => i.Paths.Contains([Location Item ID]));
#Get items for context language only –
predicate = predicate.And<SearchResultItem>(item => item.Language == Context.Language.Name);
# get items which have a field value
predicate = predicate.And<SearchResultItem>(item => item["fieldname"] == "Sitecore")