EpiServer 对任意数量值的基本过滤

EpiServer Basic Filtering of Arbitrary Amount of Values

考虑以下搜索:

return SearchClient.Instance.UnifiedSearchFor(Request.Query)
.Filter(x => ((IContent)x).Ancestors().Match([ANCESTOR ID]))
.GetResult();

这很好用,只要只有一个 ANCESTOR ID 可以匹配。没有,有多个 - 但我不确定到底有多少。

如何对此结果集执行多个筛选?

我试过的

var query = SearchClient.Instance.UnifiedSearchFor(Request.Query);

[ANCESTOR IDS].ForEach(o => query.Filter(x => ((IContent)x).Ancestors().Match(o.ToString())));

return query.Skip(offset).GetResult();

这似乎不起作用,过滤器未应用。我认为这是因为方法链接的方式!?

非常感谢任何帮助。 table 奖励任何帮助我破解它的人。

我还尝试了什么

    var ancestorFilterBuilder = SearchClient.Instance.BuildFilter<MyPageType>();

    foreach (var ancestorID in ancestorIDs)
    {
        ancestorFilterBuilder.Or(o => o.Ancestors().Match(ancestorID.ToString()));
    }
.....

SearchClient.Instance.UnifiedSearchFor(Request.Query)
                        .Filter(ancestorFilterBuilder)......

这也没有成功过滤。

我认为您需要在 ForEach 循环中重新分配 query

看起来您没有使用 return 值,这意味着您的 query 对象未被循环修改。

[ANCESTOR IDS].ForEach(o => query = query.Filter(x => ((IContent)x).Ancestors().Match(o.ToString())));

我确信我误解了 EpiServer API,而实际上我动态构建过滤器的方法是正确的,除了重新分配额外的 Or 调用过滤器本身(受 Ted 在我使用的另一个循环的上下文中提醒这样做的启发):

var ancestorFilterBuilder = SearchClient.Instance.BuildFilter<MyPageType>();

foreach (var ancestorID in ancestorIDs)
{
    ancestorFilterBuilder = ancestorFilterBuilder.Or(o => o.Ancestors().Match(ancestorID.ToString()));
}