예제 #1
0
        public static JProperty CreateQueryComponent(this IFilterComponent comp)
        {
            var type  = comp.GetType();
            var props = type.GetProperties();

            JObject filterGroup = new JObject();
            JObject filters     = new JObject();

            foreach (var prop in props)
            {
                var value = prop.GetValue(comp);
                if (value == null)
                {
                    continue;
                }

                var attr = prop.CustomAttributes.OfType <QueryComponentAttribute>().FirstOrDefault();
                if (attr == null || attr.Ignore)
                {
                    continue;
                }

                var filter = new JObject();

                if (prop.PropertyType == typeof(RangeFilter))
                {
                    filter[attr.Name] = ParseRange((RangeFilter)value);
                }
                else if (prop.PropertyType.IsEnum)
                {
                    filter[attr.Name] = ParseOption((Enum)value);
                }
                else
                {
                    filter[attr.Name] = new JValue(value);
                }

                filters.Add(filter);
            }

            filterGroup["filters"] = filters;

            return(new JProperty(type.GetCustomAttributes(false).OfType <QueryComponentAttribute>().First().Name, filterGroup));
        }
 public FilterComponentNotSupportedException(IFilterComponent component) : base($"filter component of type {component.GetType()} is not supported.")
 {
 }