【发布时间】:2016-09-22 09:39:06
【问题描述】:
我正在开发 Sitecore 8.1,并且正在通过 Sitecore lucene 为其中一个页面实现过滤功能。 Fot 过滤我正在使用谓词生成器。我在详细项目上有 3 个多列表字段
- 产品
- 类别
- 服务
现在在列表页面上,我将所有三个组过滤器作为复选框,如下图所示 -
我的要求是我想在组内应用 或,例如产品之间的条件应该是 Or 并且两个组之间的条件应该是 And。例如产品和类别应该是和。
我按照http://getfishtank.ca/blog/building-dynamic-content-search-linq-queries-in-sitecore-7 的博文来实现这个
为了实现这一点,我正在尝试 -
var builder = PredicateBuilder.True<TestResultItem>();
var Categorybuilder = PredicateBuilder.False<TestResultItem>();
if (!string.IsNullOrEmpty(Categorys))
{
var CategoryItems = Categorys.Split('|');
foreach (var Category in CategoryItems)
{
var ct = Sitecore.ContentSearch.Utilities.IdHelper.NormalizeGuid(Categorys, true);
Categorybuilder = Categorybuilder.Or(i => i.Category.Contains(ct));
}
}
var Servicebuilder = PredicateBuilder.False<TestResultItem>();
if (!string.IsNullOrEmpty(Service))
{
var ServiceItems = Service.Split('|');
foreach (var ser in ServiceItems)
{
var si = Sitecore.ContentSearch.Utilities.IdHelper.NormalizeGuid(ser, true);
Servicebuilder = Servicebuilder.Or(i => i.Service.Contains(si));
}
}
var productsbuilder = PredicateBuilder.False<TestResultItem>();
if (!string.IsNullOrEmpty(products))
{
var productItems = products.Split('|');
foreach (var product in productItems)
{
var pd = Sitecore.ContentSearch.Utilities.IdHelper.NormalizeGuid(product, true);
productsbuilder = productsbuilder.Or(i => i.Category.Contains(pd));
}
}
Servicebuilder = Servicebuilder.Or(Categorybuilder);
productsbuilder = productsbuilder.Or(Servicebuilder);
builder = builder.And(productsbuilder);
上面给出的代码对我不起作用。我知道我做错了什么,因为我不擅长谓词生成器,或条件在复选框组之间不起作用。
谁能告诉我在给定的代码中我哪里错了,或者有什么最好的方法来实现这一点。
任何帮助将不胜感激
【问题讨论】:
标签: sitecore lucene.net sitecore8 predicatebuilder sitecore-lucene