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;
		}
示例#2
0
        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);
        }