如何在 Sitecore 中进行查询

本文关键字:查询 Sitecore | 更新日期: 2023-09-27 18:34:11

我尝试在使用 Ajax 脚本时查询 Sitecore 中的某个字段。如果脚本使用以下值进行硬编码,则该脚本有效:

public void ProcessRequest(HttpContext context)
{
    JOBject j = new JObject(
    new JProperty("test", 10),
    new JProperty("test1", 20)
    );
    context.Response.ContentType = "application/json";
    context.Response.Write(j.ToString(Formatting.None));

}

但我试图做的是在有输入时找到一个特定的值。因此,查询将搜索某个模板 ID,然后在找到该模板时搜索特定字段,例如"书籍",如果该字段与用户输入的值匹配,则在同一项目上,它将在同一项目上显示"书籍编号"字段,该字段位于在 Sitecore 中创建的同一项目上。

            try {
                $.ajax({
                  type:"POST",
                  url:"/Test/Test.ajax.ashx",
                  data: {"field":$('#input').val()},
                  cache:false,
                  dataType:'json',
                  success: function(data, status, xhr) {
                    if (data.test== '' || data.test1== '') alert('nothing found');
                    else {
                      $('#test').html(data.test);
                      $('#test1').html(data.test1);
                    }
                  }
                });
            }catch (e) {
                alert(e.message);
            }

如何在 Sitecore 中进行查询

使用 Lucene 搜索上下文,您可以使用这样的代码。这将查找基于给定模板 ID 的所有项目。

using (var context = ContentSearchManager.GetIndex(Search.MasterIndex).CreateSearchContext())
        {
            IQueryable<SearchResultItem> query = context.GetQueryable<SearchResultItem>();
            var computedLanguage = Sitecore.Context.Language.CultureInfo.Name.Replace("-", String.Empty);
            SearchResults<SearchResultItem> results = null;
            query = query.Where(x => x.TemplateId == new ID("{659B67C6-4810-4A22-B9E8-9463005113D6}"));
            results = query.GetResults();
}

您可以通过在路径上添加筛选器来进一步细化它。

query = query.Where(x => x.TemplateId == new ID("{659B67C6-4810-4A22-B9E8-9463005113D6}"))
                .Where(x => x.Path.Contains("/Sitecore/Content"));

有几个筛选器可以与 Linq 对象一起使用。