private static void TestFilterByName(string expected, IEnumerable<C> items, string operation, object value) { var genericFilter = new FilterCriteria("Name", operation, value); Console.WriteLine("genericFilter: " + genericFilter.Property + " " + genericFilter.Operation + " " + genericFilter.Value); var genericFilterHelper = new GenericFilterHelper(new DomainObjectModelMock()); var filterObject = genericFilterHelper.ToFilterObjects(new FilterCriteria[] { genericFilter }).Single(); Console.WriteLine("filterObject.FilterType: " + filterObject.FilterType.FullName); var filterExpression = genericFilterHelper.ToExpression<C>((IEnumerable<PropertyFilter>)filterObject.Parameter); var filteredItems = items.AsQueryable().Where(filterExpression).ToList(); Assert.AreEqual(expected, TestUtility.DumpSorted(filteredItems, item => item.Name ?? "<null>"), "Testing '" + operation + " " + value + "'."); }
public static bool OptimizeFiltersUnion(FilterCriteria a, FilterCriteria b, out FilterCriteria union) { if (a.Filter == b.Filter && a.Property == b.Property && a.Operation == b.Operation) { if (a.Value == b.Value) { union = a; return(true); } if (string.Equals(a.Operation, "In", StringComparison.OrdinalIgnoreCase) && a.Value is IList <Guid> && b.Value is IList <Guid> ) { var listUnion = ((IList <Guid>)a.Value).Union((IList <Guid>)b.Value).ToList(); union = new FilterCriteria(a.Property, a.Operation, listUnion); return(true); } } union = null; return(false); }
private void ValidateAndPrepare(FilterCriteria filter) { if (!string.IsNullOrEmpty(filter.Property) && !string.IsNullOrEmpty(filter.Filter)) { throw new ClientException("Invalid generic filter criteria: both property filter and predefined filter are set. (Property = '" + filter.Property + "', Filter = '" + filter.Filter + "')"); } if (string.IsNullOrEmpty(filter.Property) && string.IsNullOrEmpty(filter.Filter)) { throw new ClientException("Invalid generic filter criteria: both property filter and predefined filter are null."); } if (!string.IsNullOrEmpty(filter.Property)) { // Property filter: if (string.IsNullOrEmpty(filter.Operation)) { throw new ClientException("Invalid generic filter criteria: Operation is not set. (Property = '" + filter.Property + "')"); } } if (!string.IsNullOrEmpty(filter.Filter)) { // Specific filter: if (string.IsNullOrEmpty(filter.Operation)) { filter.Operation = FilterOperationMatches; } if (!string.Equals(filter.Operation, FilterOperationMatches, StringComparison.OrdinalIgnoreCase) && !string.Equals(filter.Operation, FilterOperationNotMatches, StringComparison.OrdinalIgnoreCase)) { throw new ClientException(string.Format( "Invalid generic filter criteria: Supported predefined filter operations are '{0}' and '{1}'. (Filter = '{2}', Operation = '{3}')", FilterOperationMatches, FilterOperationNotMatches, filter.Filter, filter.Operation)); } } }
public void InvalidPropertyNameError() { using (var executionContext = new CommonTestExecutionContext()) { var repository = new Common.DomRepository(executionContext); var childQuery = repository.TestGenericFilter.Child.Query(); FilterCriteria filter; filter = new FilterCriteria { Property = "Parentt", Operation = "equal", Value = null }; TestUtility.ShouldFail(() => GenericFilterWithPagingUtility.Filter(childQuery, new[] { filter }).ToList(), "generic filter", "property 'Parentt'", "Type 'TestGenericFilter.Child'", "UserException"); } }
private bool IsPropertyFilter(FilterCriteria filter) { return(!string.IsNullOrEmpty(filter.Property)); }
/// <summary> /// Compares only filters without parameters. /// Note: This method will not detected same filter types if they differ in namespace usage, since <see cref="FilterCriteria.Filter"/> /// should always have full namespace declared (FullName or AssemblyQualifiedName). /// </summary> public static bool EqualsSimpleFilter(FilterCriteria filter, string filterName) { return(filter.Value == null && (string.IsNullOrEmpty(filter.Operation) || string.Equals(filter.Operation, FilterOperationMatches, StringComparison.OrdinalIgnoreCase)) && IsSameType(filter.Filter, filterName)); }