public static IEnumerable <FilterDescriptor> SearchFilterDescriptors(CompositeFilterDescriptor root, string fieldName) { if (root == null) { return(new List <FilterDescriptor>()); } return(FlattenCompositeFilterDescriptor(root) .Where(x => x.Field.Trim().ToLower() == fieldName.Trim().ToLower())); }
/// <summary> /// Flatten out a CompositeFilterDescriptor to FilterDescriptor[] /// </summary> public static IEnumerable <FilterDescriptor> FlattenCompositeFilterDescriptor(CompositeFilterDescriptor root) { var result = new List <FilterDescriptor>(); if (root?.Filters != null) { // current system only support 'and' if (root.Logic.ToLower() == "and") { foreach (var filterCriteria in root.Filters) { string json = filterCriteria.ToString(); if (json.IndexOf("logic") > -1) { var filterDescriptor = json.ToObject <CompositeFilterDescriptor>(); // recursive loop result.AddRange(FlattenCompositeFilterDescriptor(filterDescriptor)); } else { var filterDescriptor = json.ToObject <FilterDescriptor>(); result.Add(filterDescriptor); } } } else { throw new NotImplementedException("Logic not handled"); } } return(result); }