2016-02-05 2 views
2

Работа с 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>> 

так, возможно, что-то может использоваться для создания правильного общего вызова к нему

ответ

0

Определенно можно создать общие выражения лямбда, это просто нелегко и требует большого количества кода отражения.

Я не делал этого через некоторое время, но, возможно, если вы посмотрите на код, который я создал для чего-то подобного некоторое время назад (Generic лямбда-выражения), это поможет. Я уверен, что кто-то с более свежим опытом поможет вам здесь достаточно скоро.

Decimal precision attribute < - принять смотреть этот ответ ведьма имеет код genereate modelBuilder.Entity<CLASS>().Property(OBJECT=> OBJECT.PROPERTY).HasPrecision(12, 10) автоматически из атрибута в классе

Смежные вопросы