Esempio n. 1
0
        public static Expression ConcatExpressionsWithOperator(Expression left, Expression right, FilterJoinType filterJoinType)
        {
            switch (filterJoinType)
            {
            case FilterJoinType.And:
                return(Expression.And(left, right));

            case FilterJoinType.Or:
                return(Expression.OrElse(left, right));

            default:
                return(Expression.And(left, right));
            }
        }
Esempio n. 2
0
        private static Expression BuildFilterValuesExpression(Expression left, List <FilterValue> filterValues, FilterJoinType filterValueJoinType = FilterJoinType.Or)
        {
            Expression exp = null;

            foreach (var filterValue in filterValues)
            {
                Expression right = null;
                if (filterValue.Value.GetType().IsGenericType&& filterValue.Value is IList)
                {
                    IList list = RemakeStaticListWithNewType(left.Type, filterValue.Value as IList);
                    right = Expression.Constant(list);
                }
                else
                {
                    if (IsNullable(left.Type))
                    {
                        var  underlyingType = Nullable.GetUnderlyingType(left.Type);
                        Type type           = typeof(Nullable <>).MakeGenericType(underlyingType);
                        right = Expression.Convert(Expression.Constant(Convert.ChangeType(filterValue.Value, underlyingType)), type);
                    }
                    else
                    {
                        var value = Convert.ChangeType(filterValue.Value, left.Type);
                        right = Expression.Constant(value);
                    }
                }

                Expression concatenated = ExpressionHelpers.ConcatExpressionsWithOperator(left, right, filterValue.Operator);
                if (exp == null)
                {
                    exp = concatenated;
                }
                else
                {
                    exp = ExpressionHelpers.ConcatExpressionsWithOperator(exp, concatenated, filterValueJoinType);
                }
            }

            return(exp);
        }
Esempio n. 3
0
        private static Expression CreateFilterExpression <T>(List <Filter> filters, ParameterExpression pe, FilterJoinType filterGroupJoinType = FilterJoinType.And)
        {
            Expression exp = null;

            foreach (var filter in filters)
            {
                Expression left    = ExpressionHelpers.BuildNestedPropertyExpression(pe, filter.PropertyName);
                Expression builded = BuildFilterValuesExpression(left, filter.Value, filter.FilterValueJoinType);

                if (exp == null)
                {
                    exp = builded;
                }
                else
                {
                    exp = ExpressionHelpers.ConcatExpressionsWithOperator(exp, builded, filterGroupJoinType);
                }
            }

            return(exp);
        }
Esempio n. 4
0
        private void StartExportCommandExecute()
        {
            switch (RecordScope)
            {
            case "Deleted":
                RecordProcessingScope = RecordProcessingScope.Deleted;
                break;

            case "Both":
                RecordProcessingScope = RecordProcessingScope.Both;
                break;

            case "Active":
            default:
                RecordProcessingScope = RecordProcessingScope.Undeleted;
                break;
            }

            Epi.ImportExport.Filters.ConditionJoinTypes op = Epi.ImportExport.Filters.ConditionJoinTypes.And;

            if (FilterJoinType != null && FilterJoinType.Equals("or", StringComparison.OrdinalIgnoreCase))
            {
                op = Epi.ImportExport.Filters.ConditionJoinTypes.Or;
            }

            ContactTracing.ImportExport.SyncFileFilters filters = new ContactTracing.ImportExport.SyncFileFilters(Database, op);

            if (ApplyFilters == true)
            {
                #region Check to see if user's filtering options make sense

                //if (String.IsNullOrEmpty(varName1) && String.IsNullOrEmpty(value1))
                //{
                //    MessageBox.Show("Neither a variable nor a value have been selected for the first condition. Please ensure both a variable and a value are present before proceeding.", "Missing filter information", MessageBoxButton.OK, MessageBoxImage.Error);
                //    return;
                //}

                //if (!String.IsNullOrEmpty(varName1) && String.IsNullOrEmpty(value1))
                //{
                //    MessageBox.Show("A variable has been selected for the first condition, but no value has been specified. Please specify a value and try again.", "No value specified", MessageBoxButton.OK, MessageBoxImage.Error);
                //    return;
                //}

                //if (!String.IsNullOrEmpty(value1) && String.IsNullOrEmpty(varName1))
                //{
                //    MessageBox.Show("A value has been selected for the first condition, but no variable has been specified. Please specify a variable on which to filter and try again.", "No variable specified", MessageBoxButton.OK, MessageBoxImage.Error);
                //    return;
                //}

                //if (cmbLogicalOperator.SelectedIndex == 1 && String.IsNullOrEmpty(varName2) && String.IsNullOrEmpty(value2))
                //{
                //    MessageBox.Show("Neither a variable nor a value have been selected for the second condition. Please ensure both a variable and a value are present before proceeding.", "Missing filter information", MessageBoxButton.OK, MessageBoxImage.Error);
                //    return;
                //}

                //if (cmbLogicalOperator.SelectedIndex == 1 && !String.IsNullOrEmpty(varName2) && String.IsNullOrEmpty(value2))
                //{
                //    MessageBox.Show("A variable has been selected for the second condition, but no value has been specified. Please specify a value and try again.", "No value specified", MessageBoxButton.OK, MessageBoxImage.Error);
                //    return;
                //}

                //if (cmbLogicalOperator.SelectedIndex == 1 && !String.IsNullOrEmpty(value2) && String.IsNullOrEmpty(varName2))
                //{
                //    MessageBox.Show("A value has been selected for the second condition, but no variable has been specified. Please specify a variable on which to filter and try again.", "No variable specified", MessageBoxButton.OK, MessageBoxImage.Error);
                //    return;
                //}

                #endregion

                if (!String.IsNullOrEmpty(FilterField1) && !String.IsNullOrEmpty(FilterValue1))
                {
                    if (FilterOperator1.Equals("equals", StringComparison.OrdinalIgnoreCase))
                    {
                        TextRowFilterCondition tfc = new TextRowFilterCondition("[" + FilterField1 + "] = @" + FilterField1 + "", "" + FilterField1 + "", "@" + FilterField1 + "", FilterValue1);
                        tfc.Description = "" + FilterField1 + " equals " + FilterValue1;
                        filters.Add(tfc);
                    }
                    else
                    {
                        string tempFilterValue1    = "%" + FilterValue1 + "%";
                        TextRowFilterCondition tfc = new TextRowFilterCondition("[" + FilterField1 + "] LIKE @" + FilterField1 + "", "" + FilterField1 + "", "@" + FilterField1 + "", tempFilterValue1);
                        tfc.Description       = "" + FilterField1 + " contains " + tempFilterValue1;
                        tfc.ConditionOperator = ConditionOperators.Contains;
                        filters.Add(tfc);
                    }
                }

                if (!String.IsNullOrEmpty(FilterField2) && !String.IsNullOrEmpty(FilterValue2))
                {
                    if (FilterOperator2.Equals("equals", StringComparison.OrdinalIgnoreCase))
                    {
                        TextRowFilterCondition tfc = new TextRowFilterCondition("[" + FilterField2 + "] = @" + FilterField2 + "", "" + FilterField2 + "", "@" + FilterField2 + "", FilterValue2);
                        tfc.Description = "" + FilterField2 + " equals " + FilterValue2;
                        filters.Add(tfc);
                    }
                    else
                    {
                        string tempFilterValue2    = "%" + FilterValue2 + "%";
                        TextRowFilterCondition tfc = new TextRowFilterCondition("[" + FilterField2 + "] LIKE @" + FilterField2 + "", "" + FilterField2 + "", "@" + FilterField2 + "", tempFilterValue2);
                        tfc.Description       = "" + FilterField2 + " contains " + tempFilterValue2;
                        tfc.ConditionOperator = ConditionOperators.Contains;
                        filters.Add(tfc);
                    }
                }
            }

            CreateCaseSyncFileStart(filters);
        }