public IEnumerable <TKCustomMapPin> GetPinsByTag(string tag) { tag = tag.ToLower(); var categories = PinCategories.Where(item => item.Name.ToLower().Contains(tag)).Select(item => item.Id).ToList(); categories.AddRange( PinSubCategories?.Where(item => item.Name.ToLower().Contains(tag)).Select(item => item.Id)); return((ApplicationSettings.LoadedPins.Pins.Where( pin => pin.Pin.Title.ToLower().Contains(tag) || pin.CategoriesBranch.Intersect(categories).Any()) .Select(pin => pin.Pin)).ToList()); }
public void UpdatePinsVisible(int?changedCategoryId = null, bool?isSelected = null, bool?isRootCategory = null) { var selectedRootcategories = SelectedRootCategories; var selectedSubcategories = SelectedSubCategories; if (!selectedRootcategories.Any()) { foreach (var pin in Pins) { pin.IsVisible = CheckVisiblePinByTags(pin); } } else { foreach (var pin in Pins.Where(pin => selectedRootcategories.Contains(pin.RootCategory))) { if (!CheckVisiblePinByTags(pin)) { pin.IsVisible = false; continue; } if (!pin.SubCategories.Any()) //Если нет вложенных категорий, или ни одна из подкатегорий не выбрана { pin.IsVisible = true; } else { var subcategories = PinSubCategories.Where(item => item.ParentId == pin.RootCategory).Select(item => item.Id); // Если не отмечены никакие подкатегории в категории var selectedByNoSelectedSubcategoriesIncategory = !selectedSubcategories.Intersect(subcategories).Any(); var visibleBySelectedSubCategory = pin.SubCategories.Any(item => selectedSubcategories.Contains(item)); //Если выбрана подкатегория с пином pin.IsVisible = (visibleBySelectedSubCategory || selectedByNoSelectedSubcategoriesIncategory); } } foreach (var pin in Pins.Where(pin => !selectedRootcategories.Contains(pin.RootCategory))) { pin.IsVisible = false; } } OnPropertyChanged(nameof(SelectedPinsCnt)); }