private FilterItem FindRecursive(FilterItem item, int tagId) { if (item.HasSubOptions) { if (item.SubOptions.Any(i => i.TagId == tagId)) { return(item.SubOptions.First(i => i.TagId == tagId)); } foreach (var subItem in item.SubOptions.Where(i => i.HasSubOptions)) { var result = FindRecursive(subItem, tagId); if (result != null) { return(result); } } } return(null); }
public static FilterItem InitFilters() { try { var mainItem = new FilterItem(); //mainItem.OptionText = "Lepidoptera"; mainItem.OptionText = "Bodentiere"; //why 7? mainItem.TagId = 0; mainItem.SelectedItems = new ObservableCollection <FilterItem>(); mainItem.ValueFilterDictionary = new Dictionary <int, List <int> >(); //Toplevel var tFilterItems = Load.FromFile <TaxonFilterItem>("TaxonFilterItems.json"); var topLevelFilterItems = tFilterItems.Select(tfi => new { tfi.TagParentId, tfi.TagParentName, tfi.KeyDataType, tfi.VisibilityCategoryId }).Distinct(); foreach (var tfi in topLevelFilterItems) { if (tfi.KeyDataType != "UNKNOWN" && tfi.KeyDataType != "PIC") { mainItem.SubOptions.Add(new FilterItem { TagId = tfi.TagParentId, OptionText = tfi.TagParentName, KeyDataType = tfi.KeyDataType, VisibilityCategoryId = tfi.VisibilityCategoryId, CombineSubOptions = true, ParentItem = mainItem }); } } //Level 2 //var templist = Newtonsoft.Json.JsonConvert.DeserializeObject(tFilterItems); var idValueListValue = tFilterItems.Where(t => t.KeyDataType == "VALUE").Select(tfi => new { tfi.TagId, tfi.ListSourceJson, tfi.VisibilityCategoryId, tfi.TagValue, tfi.KeyDataType, tfi.TagParentId, tfi.MinValue, tfi.MaxValue, tfi.TaxonId, tfi.TaxonHits }); var idValueList = tFilterItems.Where(t => t.KeyDataType == "VALUELIST").Select(tfi => new { tfi.TagId, tfi.ListSourceJson, tfi.VisibilityCategoryId, tfi.TagValue, tfi.KeyDataType, tfi.TagParentId, tfi.MinValue, tfi.MaxValue, tfi.TaxonId, tfi.TaxonHits }).GroupBy(tfi => tfi.TagId); var distinctIdValueList = idValueList.Distinct().ToList(); var distinctIdValueListValue = idValueListValue.Distinct().ToList(); foreach (var tfi2 in distinctIdValueList) { FilterItem _currentItem = mainItem.FindByTagId(tfi2.First().TagParentId, false); _currentItem.SubOptions.Add( new FilterItem { TagId = tfi2.First().TagId, TagValue = tfi2.First().TagValue, OptionText = tfi2.First().TagValue, KeyDataType = tfi2.First().KeyDataType, MinValue = tfi2.First().MinValue, MaxValue = tfi2.First().MaxValue, ListSourceJson = tfi2.First().ListSourceJson != null ? tfi2.First().ListSourceJson.Take(3).ToList() : null, ParentItem = _currentItem, TaxonId = tfi2.First().TaxonId, TaxonHits = tfi2.First().TaxonHits, VisibilityCategoryId = tfi2.First().VisibilityCategoryId }); } foreach (var tfi2 in distinctIdValueListValue) { FilterItem _currentItem = mainItem.FindByTagId(tfi2.TagParentId, false); _currentItem.SubOptions.Add( new FilterItem { TagId = tfi2.TagId, TagValue = tfi2.TagValue, OptionText = tfi2.TagValue, KeyDataType = tfi2.KeyDataType, MinValue = tfi2.MinValue, MaxValue = tfi2.MaxValue, ParentItem = _currentItem, TaxonId = tfi2.TaxonId, TaxonHits = null, VisibilityCategoryId = tfi2.VisibilityCategoryId }); } return(mainItem); } catch (Exception e) { throw e; } }