使用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>>
所以也許東西可以用來做一個適當的通用調用它