Работа с EPiServer Найти и попытаться создать универсальную функциональность фасета, чтобы упростить управление фасеткой. Я хотел бы построить два общих метода: один для добавления активных фильтров для выполнения поиска хитов и один для выполнения оставшихся оставшихся фасетных фильтров.Обработка выражения лямбда с общим именем свойства
Первый метод выполнит следующее (специальный код для марки фильтра):
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;
Можно построить такую функциональность? Самый большой Questionmark у меня есть, как перевести строку ввода «Brand», чтобы быть Марка недвижимости в х => 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>>
так, возможно, что-то может использоваться для создания правильного общего вызова к нему