public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is QueryMatchMode) { QueryMatchMode matchMode = (QueryMatchMode)value; switch (matchMode) { case QueryMatchMode.Any: return(GisEditor.LanguageManager.GetStringResource("FindFeaturesWindowAdvancedQueryAny")); case QueryMatchMode.All: default: return(GisEditor.LanguageManager.GetStringResource("FindFeaturesWindowAdvancedQueryAll")); } } else { return(Binding.DoNothing); } }
/// <summary> /// Sets the match mode for this query, which is by default <see cref="QueryMatchMode.All"/>. /// This should be called before adding any other queries. /// </summary> public QueryWrapper <T> SetMode(QueryMatchMode mode) { Mode = mode; return(this); }
public IEnumerable <Feature> FindFeatures(ObservableCollection <QueryConditionViewModel> conditions, QueryMatchMode queryMatchMode) { IEnumerable <Feature> filteredFeatures = new Collection <Feature>(); switch (queryMatchMode) { case QueryMatchMode.All: var featuresGroup = conditions.Select(condition => AdvancedQueryViewModel.FilterFeatures(condition)).ToArray(); for (int i = 0; i < featuresGroup.Length; i++) { if (i == 0) { filteredFeatures = featuresGroup[i]; } else { return(Intersect(featuresGroup[i - 1], featuresGroup[i])); } } break; case QueryMatchMode.Any: filteredFeatures = conditions.SelectMany(condition => AdvancedQueryViewModel.FilterFeatures(condition)); Dictionary <string, Feature> result = new Dictionary <string, Feature>(); foreach (var item in filteredFeatures) { Feature newFeature = GisEditor.SelectionManager.GetSelectionOverlay().CreateHighlightFeature(item, (FeatureLayer)item.Tag); if (!result.ContainsKey(newFeature.Id)) { result.Add(newFeature.Id, newFeature); } } return(result.Values); } return(filteredFeatures); }