使用EPiServer查找并尝试为其构建通用构面funcionality,以简化管理应启用哪个构面。我想构建两种通用方法,一种是添加有效过滤器来执行匹配搜索,另一种是执行剩余的可用面过滤器。使用通用属性名称处理lambda表达式
第一种方法将执行以下(品牌过滤特定代码):
var brandFilter = client.BuildFilter<FashionProduct>();
foreach (var facet in SelectedGroup.Facets.Where(x => x.Selected))
{
brandFilter = brandFilter.Or(x => x.Brand.Match(facet.Key));
}
query = query.Filter(brandFilter);
我想能够调用它在一个通用的方式,所以我可以立足一些简单的列表中可用的面字符串或对象。就像这样:
query = AddFilterFacet<FashionProduct>(query, "Brand", SelectedGroup.Facets)
因此该方法将采取对象的类型来过滤上,查询到关于追加,属性的名称进行筛选,在过滤器和值列表添加。
第二种方法是类似的,但更多地涉及执行以下步骤:
facetQuery = facetQuery.TermsFacetFor(x => x.Brand)
...
var brandFacets = facetResult.TermsFacetFor(x => x.Brand).Terms;
是否有可能建立这种功能?我最大的问号是如何“品牌”输入字符串翻译是品牌属性,X => x.Brand
private void AddFilterFacet<T>(IClient client, ref ITypeSearch<T> query, string propertyName, List<FacetOption> facets)
{
var filter = client.BuildFilter<T>();
foreach (var facet in facets)
{
filter = filter.Or(x => x.????.Match(facet.Key));
}
query = query.Filter(filter);
}
的。或者方法采用
System.Linq.Expressions.Expression<Func<T, Find.Api.Querying.Filter>>
所以也许东西可以用来做一个适当的通用调用它