public BoolFilterDescriptor <T> Must(params Func <FilterDescriptor <T>, FilterContainer>[] filters) { var descriptors = new List <FilterContainer>(); foreach (var selector in filters) { var filter = new FilterDescriptor <T>(); var f = selector(filter); if (f.IsConditionless) { continue; } descriptors.Add(f); } ((IBoolFilter)this).Must = descriptors; return(this); }
/// <summary> /// A filter that filters out matched documents using a query. /// This filter is more performant then bool filter. /// </summary> public FilterContainer Not(Func <FilterDescriptor <T>, FilterContainer> selector) { var notFilter = new NotFilterDescriptor(); var filter = new FilterDescriptor <T>() { IsConditionless = true }; FilterContainer bf = filter; if (selector != null) { bf = selector(filter); } ((INotFilter)notFilter).Filter = bf; return(this.New(notFilter, f => f.Not = notFilter)); }
private FilterDescriptor <T> CreateConditionlessFilterDescriptor(IFilter filter, string type = null) { var self = Self; if (self.IsStrict && !self.IsVerbatim) { throw new DslException("Filter resulted in a conditionless '{1}' filter (json by approx):\n{0}" .F( JsonConvert.SerializeObject(this, Formatting.Indented, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }) , type ?? filter.GetType().Name.Replace("Descriptor", "").Replace("`1", "") ) ); } var f = new FilterDescriptor <T>(); f.Self.IsStrict = self.IsStrict; f.Self.IsVerbatim = self.IsVerbatim; f.IsConditionless = true; return(f); }
private FilterDescriptor <T> New(IFilter filter, Action <IFilterContainer> fillProperty) { var self = Self; if (filter.IsConditionless && !self.IsVerbatim) { this.ResetCache(); return(CreateConditionlessFilterDescriptor(filter)); } this.SetCacheAndName(filter); var f = new FilterDescriptor <T>(); f.Self.IsStrict = self.IsStrict; f.Self.IsVerbatim = self.IsVerbatim; if (fillProperty != null) { fillProperty(f); } this.ResetCache(); return(f); }