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()));
}
考虑以下搜索:
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()));
}