我正在尝试在代码中构建一个搜索谓词来比较Sitecore中的两个字段,我收到一条奇怪的错误消息。基本上我在每个内容项上有两个日期字段 - FirstPublishDate(内容项首次发布的日期)和LastPublishDate(内容项发布的最后日期)。我想找到LastPublishDate属于某个日期范围的所有内容项,以及LastPublishDate不等于FirstPublishDate的内容项。在这里使用Linq是我生成谓词的方法......
undefined reference to
然后我在我的常规站点搜索代码中使用这个谓词来执行如下搜索:上面的谓词作为" additionalWhere"传递给这个方法。参数。
a.cpp
当我尝试这个时,我收到以下错误消息:
protected Expression<Func<T, Boolean>> getDateFacetPredicate<T>() where T : MySearchResultItem
{
var predicate = PredicateBuilder.True<T>();
foreach (var facet in myFacetCategories)
{
var dateTo = System.DateTime.Now;
var dateFrom = dateTo.AddDays(facet.Value*-1);
predicate = predicate.And(i => i.LastPublishDate.Between(dateFrom, dateTo, Inclusion.Both)).And(j => j.LastPublishDate != j.FirstPublishDate);
}
return predicate;
}
从我能理解的错误信息来看,我似乎并不喜欢我试图将两个不同的字段相互比较,而不是将字段与常量进行比较。另一个奇怪的事情是错误似乎指向与聚合方面有关的一行代码。我做了谷歌搜索,并提出了与此错误无关的任何内容。有什么想法吗?
谢谢, 科里
答案 0 :(得分:3)
我认为你所尝试的是不可能的,如果你看一下this可能确实如此。给出的解决方案是将您的逻辑放在索引中:创建一个ComputedField来检查您的日期并将值放入您可以搜索的索引中(可以是一个简单的布尔值)。 您将需要拆分逻辑 - 日期范围内的查询仍然可以在谓词中完成(因为它相对于当前日期),但是第一个和最后一个的比较应该在索引时间而不是在查询时间上完成