public QueryConditionViewModel CloneDeep() { var viewMode = new QueryConditionViewModel() { columnName = this.columnName, matchValue = this.matchValue, layer = this.layer, featureLayers = this.featureLayers, selectedColumnName = this.selectedColumnName }; if (queryOperator != null) { viewMode.queryOperator = queryOperators.FirstOrDefault(op => op.QueryOperaterType == queryOperator.QueryOperaterType); } return(viewMode); }
public QueryConditionWindow(QueryConditionViewModel viewModel) { if (viewModel == null) { throw new ArgumentNullException(); } ApplyWindowStyle(this); InitializeComponent(); if (GisEditor.ActiveMap != null) { queryCondition = viewModel.CloneDeep(); if (viewModel.Layer != null) { layersComboBox.IsEnabled = false; } DataContext = QueryCondition; } Messenger.Default.Register <bool>(this, queryCondition, (message) => { if (IsActive) { DialogResult = message; if (message) { viewModel.Layer = queryCondition.Layer; viewModel.QueryOperator = queryCondition.QueryOperator; viewModel.ColumnName = queryCondition.ColumnName; viewModel.MatchValue = queryCondition.MatchValue; } Close(); } }); Closing += (s, e) => { Messenger.Default.Unregister(this); }; }
public static IEnumerable <Feature> FilterFeatures(QueryConditionViewModel condition) { IEnumerable <Feature> filteredFeatures = new Collection <Feature>(); bool isContinue = MessageBoxHelper.ShowWarningMessageIfSoManyCount(condition.Layer); if (!isContinue) { return(new Collection <Feature>()); } condition.Layer.SafeProcess(() => { var allFeatures = condition.Layer.QueryTools.GetAllFeatures(condition.Layer.GetDistinctColumnNames()); switch (condition.QueryOperator.QueryOperaterType) { case QueryOperaterType.Equal: filteredFeatures = allFeatures.Where(feature => GetFeatureValue(feature, condition.ColumnName).Equals(condition.MatchValue, StringComparison.InvariantCultureIgnoreCase)); break; case QueryOperaterType.Contains: filteredFeatures = allFeatures.Where(feature => GetFeatureValue(feature, condition.ColumnName).IndexOf(condition.MatchValue, StringComparison.InvariantCultureIgnoreCase) != -1); break; case QueryOperaterType.StartsWith: filteredFeatures = allFeatures.Where(feature => GetFeatureValue(feature, condition.ColumnName).StartsWith(condition.MatchValue, StringComparison.InvariantCultureIgnoreCase)); break; case QueryOperaterType.EndsWith: filteredFeatures = allFeatures.Where(feature => GetFeatureValue(feature, condition.ColumnName).EndsWith(condition.MatchValue, StringComparison.InvariantCultureIgnoreCase)); break; case QueryOperaterType.DoesNotEqual: filteredFeatures = allFeatures.Where(feature => !GetFeatureValue(feature, condition.ColumnName).Equals(condition.MatchValue, StringComparison.InvariantCultureIgnoreCase)); break; case QueryOperaterType.DoesNotContain: filteredFeatures = allFeatures.Where(feature => GetFeatureValue(feature, condition.ColumnName).IndexOf(condition.MatchValue, StringComparison.InvariantCultureIgnoreCase) == -1); break; case QueryOperaterType.GreaterThan: filteredFeatures = allFeatures.Where(feature => CompareStringAsNumber(GetFeatureValue(feature, condition.ColumnName), condition.MatchValue, QueryOperaterType.GreaterThan)); break; case QueryOperaterType.GreaterThanOrEqualTo: filteredFeatures = allFeatures.Where(feature => CompareStringAsNumber(GetFeatureValue(feature, condition.ColumnName), condition.MatchValue, QueryOperaterType.GreaterThanOrEqualTo)); break; case QueryOperaterType.LessThan: filteredFeatures = allFeatures.Where(feature => CompareStringAsNumber(GetFeatureValue(feature, condition.ColumnName), condition.MatchValue, QueryOperaterType.LessThan)); break; case QueryOperaterType.LessThanOrEqualTo: filteredFeatures = allFeatures.Where(feature => CompareStringAsNumber(GetFeatureValue(feature, condition.ColumnName), condition.MatchValue, QueryOperaterType.LessThanOrEqualTo)); break; default: break; } }); Feature[] results = filteredFeatures.ToArray(); for (int i = 0; i < results.Length; i++) { results[i].Tag = condition.Layer; } return(results); }