public string PropertyPath(PropertyPathMarker marker) { if (marker.IsConditionless()) return null; var name = !marker.Name.IsNullOrEmpty() ? marker.Name : this.PropertyNameResolver.Resolve(marker.Type); if (marker.Boost.HasValue) name += "^" + marker.Boost.Value.ToString(CultureInfo.InvariantCulture); return name; }
private BaseFilter SetDictionary( string type, PropertyPathMarker key, object value, Action <Dictionary <PropertyPathMarker, object>, FilterDescriptor <T> > setter ) { setter.ThrowIfNull("setter"); var dictionary = new Dictionary <PropertyPathMarker, object>(); if (key.IsConditionless()) { return(CreateConditionlessFilterDescriptor(dictionary, type)); } dictionary.Add(key, value); if (this._Cache.HasValue) { dictionary.Add("_cache", this._Cache); } if (!string.IsNullOrWhiteSpace(this._Name)) { dictionary.Add("_name", this._Name); } if (!string.IsNullOrWhiteSpace(this._CacheKey)) { dictionary.Add("_cache_key", this._CacheKey); } this.ResetCache(); var bucket = new FilterDescriptor <T> { IsStrict = this.IsStrict, IsVerbatim = this.IsVerbatim }; setter(dictionary, bucket); if (this.IsVerbatim) { return(bucket); } //find out if we are conditionless if (value == null) { return(CreateConditionlessFilterDescriptor(dictionary, type)); } else if (value is string) { if (string.IsNullOrEmpty(value.ToString())) { return(CreateConditionlessFilterDescriptor(value, type)); } } else if (value is IEnumerable <BaseFilter> ) { var l = (IEnumerable <object>)value; var baseFilters = l.OfType <BaseFilter>().ToList(); var allBaseFiltersConditionless = baseFilters.All(b => b.IsConditionless); if (!baseFilters.HasAny() || allBaseFiltersConditionless) { return(CreateConditionlessFilterDescriptor(dictionary, type)); } } else if (value is IEnumerable <string> ) { var l = (IEnumerable <string>)value; var strings = l.ToList(); var allStringsNullOrEmpty = strings.All(s => s.IsNullOrEmpty()); if (!strings.HasAny() || allStringsNullOrEmpty) { return(CreateConditionlessFilterDescriptor(dictionary, type)); } } else if (value is IEnumerable <object> ) { var l = (IEnumerable <object>)value; if (!l.HasAny()) { return(CreateConditionlessFilterDescriptor(dictionary, type)); } } else if (value is FilterBase) { var bf = (FilterBase)value; if (bf.IsConditionless) { return(CreateConditionlessFilterDescriptor(bf, type)); } } else if (value is FilterDescriptor <T> ) { var bf = (FilterDescriptor <T>)value; if (bf.IsConditionless) { return(CreateConditionlessFilterDescriptor(bf, type)); } } else if (value is BaseQuery) { var bf = (BaseQuery)value; if (bf.IsConditionless) { return(CreateConditionlessFilterDescriptor(bf, type)); } } if (key.IsConditionless()) { return(CreateConditionlessFilterDescriptor(value, type)); } return(bucket); }