EpiServer基本过滤任意数量的值

时间:2017-04-06 09:42:11

标签: c# .net search episerver

考虑以下搜索:

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();

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

任何帮助都非常感激。对于帮助我破解它的人来说,桌上有赏金。

我还尝试了什么

    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)......

这也没有成功过滤。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

我认为您需要在await Task.WhenAll(data.Select(dataPiece => Task.Run(() => DoSomething(dataPiece)))循环中重新分配query

看起来你没有使用返回值,这意味着你的ForEach对象没有被循环修改。

query