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)); } }
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); }
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); }
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); }