public void UpdateResultsBasedOnFilters() { int totalFilters = this.filters.Count; int totalResults = this.searchResults.Count; if (totalFilters == 0 || totalResults == 0) { return; } List <string> usedFilterValues = new List <string>(); for (int i = 0; i < totalFilters; i++) { SearchResultFilter filter = this.filters[i]; foreach (KeyValuePair <string, bool> filterValue in filter.Values) { if (!filterValue.Value) { this.searchResults.RemoveAll(x => !string.IsNullOrEmpty(x.GetValue(filter.Name)) && x.GetValue(filter.Name) == filterValue.Key); usedFilterValues.Add(filterValue.Key); } } foreach (string usedValue in usedFilterValues) { filter.RemoveValue(usedValue); } usedFilterValues.Clear(); } }
/// <summary> /// Gets a subset of this instance based on the filter switches /// </summary> /// <param name="resetFilters">if set to <c>true</c> [reset filters] switches after retrieving subset.</param> /// <returns></returns> public SearchResultDataSet GetSubsetBasedOnFilters(bool resetFilters) { int totalFilters = this.filters.Count; int totalResults = this.searchResults.Count; if (totalFilters == 0 || totalResults == 0) { return(null); } SearchResultDataSet dataSet = new SearchResultDataSet(); dataSet.AddSearchResultRange(this.searchResults); dataSet.AddFilterRange(this.filters); List <string> usedFilterValues = new List <string>(); for (int i = 0; i < totalFilters; i++) { SearchResultFilter filter = dataSet.filters[i]; foreach (KeyValuePair <string, bool> filterValue in filter.Values) { if (!filterValue.Value) { dataSet.searchResults.RemoveAll(x => !string.IsNullOrEmpty(x.GetValue(filter.Name)) && x.GetValue(filter.Name) == filterValue.Key); usedFilterValues.Add(filterValue.Key); if (resetFilters) { this.filters[i].SetValue(filterValue.Key, true); } } } foreach (string usedValues in usedFilterValues) { filter.RemoveValue(usedValues); } usedFilterValues.Clear(); } usedFilterValues = null; return(dataSet); }