private List <IFilterDescriptor> GetFilterData(IQueryCollection args)
        {
            IEnumerable <IFilterDescriptor> filters = new List <IFilterDescriptor>();
            var filterKeys = args.Where(o => o.Key.Contains("filterModel"))
                             .GroupBy(o => o.Key.Substring(o.Key.IndexOf("[") + 1, o.Key.IndexOf("]") - o.Key.IndexOf("[") - 1))
                             .Select(o => o.Key).ToArray();

            foreach (var key in filterKeys)
            {
                string filterType = args.FirstOrDefault(o => o.Key.Contains($"filterModel[{key}][filterType]")).Value.ToString();
                string type       = args.FirstOrDefault(o => o.Key.Contains($"filterModel[{key}][type]")).Value.ToString();
                var    conditions = args.Where(o => o.Key.Contains($"filterModel[{key}][condition")).GroupBy(o => o.Key.Substring(o.Key.IndexOf("[condition"), 12)).ToArray();
                if (conditions.Any())
                {
                    string oprt            = args.First(o => o.Key.Contains($"filterModel[{key}][operator]")).Value.ToString();
                    var    compositeFilter = new CompositeFilterDescriptor();
                    IEnumerable <IFilterDescriptor> filterSubItems = new FilterDescriptorCollection();
                    var maxConditionCount = Math.Min(conditions.Count(), 9);
                    for (var i = 0; i < maxConditionCount; i++)
                    {
                        string condetionFilterType = args.FirstOrDefault(o => o.Key.Contains($"filterModel[{key}][condition{i + 1}][filterType]")).Value.ToString();
                        string conditionType       = args.FirstOrDefault(o => o.Key.Contains($"filterModel[{key}][condition{i + 1}][type]")).Value.ToString();
                        string conditionFilter     = args.FirstOrDefault(o => o.Key.Contains($"filterModel[{key}][condition{i + 1}][filter]")).Value.ToString();
                        string conditionFilterTo   = args.FirstOrDefault(o => o.Key.Contains($"filterModel[{key}][condition{i + 1}][filterTo]")).Value.ToString();

                        //toto should be correct
                        filterSubItems = AddFilterDescriptor(filterSubItems, key, condetionFilterType, conditionType, conditionFilter, conditionFilterTo);
                    }
                    var collection = new FilterDescriptorCollection();
                    collection.AddRange(filterSubItems.ToList());
                    compositeFilter.FilterDescriptors = collection;
                    compositeFilter.LogicalOperator   = (oprt == "AND" ? FilterCompositionLogicalOperator.And : FilterCompositionLogicalOperator.Or);
                    filters = filters.Concat(new List <IFilterDescriptor>()
                    {
                        compositeFilter
                    });
                }
                else
                {
                    string filter   = args.FirstOrDefault(o => o.Key.Contains($"filterModel[{key}][filter]")).Value.ToString();
                    string filterTo = args.FirstOrDefault(o => o.Key.Contains($"filterModel[{key}][filterTo]")).Value.ToString();
                    filters = AddFilterDescriptor(filters, key, filterType, type, filter, filterTo);
                }
            }
            return(filters.ToList());
        }