private static CompositeFilterDescriptor ConvertDescriptor( CompositeFilterDescriptor compositeFilter, CompositeFilterDescriptor.DescriptorType type, Type dataType) { if (compositeFilter == null) { throw new ArgumentNullException(nameof(compositeFilter)); } if (type == CompositeFilterDescriptor.DescriptorType.Unknown) { throw new InvalidOperationException("You cannot convert the filter descriptor to unknown type."); } CompositeFilterDescriptor filterDescriptor1 = compositeFilter.Clone() as CompositeFilterDescriptor; while (filterDescriptor1.FilterDescriptors.Count > 2) { int index = filterDescriptor1.FilterDescriptors.Count - 1; filterDescriptor1.FilterDescriptors.RemoveAt(index); } while (filterDescriptor1.FilterDescriptors.Count < 2) { if ((object)dataType == (object)typeof(DateTime)) { filterDescriptor1.FilterDescriptors.Add((FilterDescriptor) new DateFilterDescriptor()); } else { filterDescriptor1.FilterDescriptors.Add(new FilterDescriptor()); } } if (type == CompositeFilterDescriptor.DescriptorType.Between || type == CompositeFilterDescriptor.DescriptorType.NotBetween) { filterDescriptor1.LogicalOperator = FilterLogicalOperator.And; FilterDescriptor filterDescriptor2 = filterDescriptor1.FilterDescriptors[0]; filterDescriptor2.PropertyName = filterDescriptor1.PropertyName; filterDescriptor2.Operator = FilterOperator.IsGreaterThanOrEqualTo; FilterDescriptor filterDescriptor3 = filterDescriptor1.FilterDescriptors[1]; filterDescriptor3.PropertyName = filterDescriptor1.PropertyName; filterDescriptor3.Operator = FilterOperator.IsLessThanOrEqualTo; filterDescriptor1.NotOperator = type == CompositeFilterDescriptor.DescriptorType.NotBetween; } return(filterDescriptor1); }
private static CompositeFilterDescriptor ConvertDescriptor(CompositeFilterDescriptor compositeFilter, DescriptorType type) { if (compositeFilter == null) { throw new ArgumentNullException("compositeFilter"); } if (type == DescriptorType.Unknown) { throw new InvalidOperationException("You cannot convert the filter descriptor to unknown type."); } CompositeFilterDescriptor result = compositeFilter.Clone() as CompositeFilterDescriptor; while (result.FilterDescriptors.Count > 2) { int lastIndex = result.FilterDescriptors.Count - 1; result.FilterDescriptors.RemoveAt(lastIndex); } while (result.FilterDescriptors.Count < 2) { result.FilterDescriptors.Add(new FilterDescriptor()); } if (type == DescriptorType.Between || type == DescriptorType.NotBetween) { result.LogicalOperator = FilterLogicalOperator.And; FilterDescriptor firstFilterDescriptor = result.FilterDescriptors[0]; firstFilterDescriptor.PropertyName = result.PropertyName; firstFilterDescriptor.Operator = FilterOperator.IsGreaterThanOrEqualTo; FilterDescriptor secondFilterDescriptor = result.FilterDescriptors[1]; secondFilterDescriptor.PropertyName = result.PropertyName; secondFilterDescriptor.Operator = FilterOperator.IsLessThanOrEqualTo; result.NotOperator = type == DescriptorType.NotBetween; } return(result); }