C# EpiServer对任意数量的值进行基本筛选

C# EpiServer对任意数量的值进行基本筛选,c#,.net,search,episerver,C#,.net,Search,Episerver,考虑以下搜索: return SearchClient.Instance.UnifiedSearchFor(Request.Query) .Filter(x => ((IContent)x).Ancestors().Match([ANCESTOR ID])) .GetResult(); 只要只有一个祖先ID可以匹配,这就可以正常工作。没有,有很多,但我不确定到底有多少 如何在此结果集上执行多个筛选器 我尝试过的 var query = SearchClient.Instance.Unif

考虑以下搜索:

return SearchClient.Instance.UnifiedSearchFor(Request.Query)
.Filter(x => ((IContent)x).Ancestors().Match([ANCESTOR ID]))
.GetResult();
只要只有一个
祖先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)......
这似乎不起作用,未应用过滤器。我想这是因为方法的链接方式

非常感谢您的帮助。任何帮助我破解它的人都会得到悬赏

我还试过什么

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)......
var-ancestorFilterBuilder=SearchClient.Instance.BuildFilter();
foreach(ancestorID中的变量ancestorID)
{
或(o=>o.祖先().Match(antestorid.ToString());
}
.....
SearchClient.Instance.UnifiedSearchFor(Request.Query)
.Filter(ancestorFilterBuilder)。。。。。。

这也没有成功过滤。

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

看起来您没有使用返回值,这意味着您的
查询
对象未被循环修改

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

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

看起来您没有使用返回值,这意味着您的
查询
对象未被循环修改

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

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

var-ancestorFilterBuilder=SearchClient.Instance.BuildFilter();
foreach(ancestorID中的变量ancestorID)
{
ancestorFilterBuilder=ancestorFilterBuilder.Or(o=>o.祖先().Match(ancestorID.ToString());
}

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

var-ancestorFilterBuilder=SearchClient.Instance.BuildFilter();
foreach(ancestorID中的变量ancestorID)
{
ancestorFilterBuilder=ancestorFilterBuilder.Or(o=>o.祖先().Match(ancestorID.ToString());
}

Hmm,不幸的是没有骰子。筛选器返回的类型与查询不同,我可能必须使用另一个变量。不过,这开始有点笨拙,我很确定我缺少了一个OOTB解决方案。啊,是的,因为您已经为
调用了
unifiedSearch。我不是
UnifiedSearch
方面的专家,但是对于标准搜索,您可以在搜索之前应用过滤器(使用
for
方法)。我相信你已经看过了:嗯,不幸的是没有骰子。筛选器返回的类型与查询不同,我可能必须使用另一个变量。不过,这开始有点笨拙,我很确定我缺少了一个OOTB解决方案。啊,是的,因为您已经为
调用了
unifiedSearch。我不是
UnifiedSearch
方面的专家,但是对于标准搜索,您可以在搜索之前应用过滤器(使用
for
方法)。我相信你已经看过了:很高兴你把它整理好了!谢谢你的帮助,很高兴你解决了!谢谢你的帮助,伙计