Example #1
0
        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);
        }
Example #2
0
        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);
        }