public void GetQuery(IHqlQuery query, QueryRecord queryRecord) { var availableFilters = DescribeFilters().ToList(); foreach (var group in queryRecord.FilterGroups) { foreach (var filter in group.Filters) { var filterContext = new FilterContext() { Query = query, State = JsonConvert.DeserializeObject(filter.State) }; string category = filter.Category; string property = filter.PropertyName; var descriptor = availableFilters.FirstOrDefault(x => x.Category == category && x.Property == property); if (descriptor == null) { continue; } descriptor.Filter(filterContext); } } }
public void ApplyFilter(FilterContext context, PropertyInfo property) { var predicate = _filterCoordinator.Filter(property.PropertyType, property.Name, context.State); Action<IAliasFactory> alias = x => x.Named(property.DeclaringType.Name); context.Query = context.Query.Where(alias, predicate); }