private bool TryCreateImplicitFilter( PropertyInfo property, out FilterFieldDefintion definition) { if (property.PropertyType == typeof(string)) { var field = new StringFilterFieldDescriptor(Context, property); definition = field.CreateDefinition(); return(true); } if (property.PropertyType == typeof(bool) || property.PropertyType == typeof(bool?)) { var field = new BooleanFilterFieldDescriptor( Context, property); definition = field.CreateDefinition(); return(true); } if (IsComparable(property.PropertyType)) { var field = new ComparableFilterFieldDescriptor( Context, property); definition = field.CreateDefinition(); return(true); } if (property.PropertyType.IsClass) { var field = new ObjectFilterFieldDescriptor( Context, property, property.PropertyType); definition = field.CreateDefinition(); return(true); } definition = null; return(false); }
private bool TryCreateImplicitFilter( PropertyInfo property, [NotNullWhen(true)] out FilterFieldDefintion?definition) { Type type = property.PropertyType; if (type.IsGenericType && System.Nullable.GetUnderlyingType(type) is { } nullableType) { type = nullableType; } if (type == typeof(string)) { var field = new StringFilterFieldDescriptor(Context, property); field.BindFilters(Definition.Fields.BindingBehavior); definition = field.CreateDefinition(); return(true); } if (type == typeof(bool)) { var field = new BooleanFilterFieldDescriptor( Context, property); field.BindFilters(Definition.Fields.BindingBehavior); definition = field.CreateDefinition(); return(true); } if (IsComparable(property.PropertyType)) { var field = new ComparableFilterFieldDescriptor( Context, property); field.BindFilters(Definition.Fields.BindingBehavior); definition = field.CreateDefinition(); return(true); } if (Context.TypeInspector.TryCreateTypeInfo(type, out ITypeInfo? typeInfo) && typeInfo.GetExtendedType()?.ElementType?.Source is { } elementType) { ArrayFilterFieldDescriptor field; if (elementType == typeof(string) || elementType == typeof(bool) || typeof(IComparable).IsAssignableFrom(elementType)) { field = new ArrayFilterFieldDescriptor( Context, property, typeof(ISingleFilter <>).MakeGenericType(elementType)); } else { field = new ArrayFilterFieldDescriptor(Context, property, elementType); } field.BindFilters(Definition.Fields.BindingBehavior); definition = field.CreateDefinition(); return(true); } if (type.IsClass) { var field = new ObjectFilterFieldDescriptor( Context, property, property.PropertyType); field.BindFilters(Definition.Fields.BindingBehavior); definition = field.CreateDefinition(); return(true); } definition = null; return(false); }
private bool TryCreateImplicitFilter( PropertyInfo property, out FilterFieldDefintion definition) { Type type = property.PropertyType; if (type.IsGenericType && Nullable.GetUnderlyingType(type) is Type nullableType) { type = nullableType; } if (type == typeof(string)) { var field = new StringFilterFieldDescriptor(Context, property); definition = field.CreateDefinition(); return(true); } if (type == typeof(bool)) { var field = new BooleanFilterFieldDescriptor( Context, property); definition = field.CreateDefinition(); return(true); } if (IsComparable(property.PropertyType)) { var field = new ComparableFilterFieldDescriptor( Context, property); definition = field.CreateDefinition(); return(true); } if (DotNetTypeInfoFactory.IsListType(type)) { if (!TypeInspector.Default.TryCreate(type, out Utilities.TypeInfo typeInfo)) { throw new ArgumentException( FilterResources.FilterArrayFieldDescriptor_InvalidType, nameof(property)); } Type elementType = typeInfo.ClrType; ArrayFilterFieldDescriptor field; if (elementType == typeof(string) || elementType == typeof(bool) || typeof(IComparable).IsAssignableFrom(elementType)) { field = new ArrayFilterFieldDescriptor( Context, property, typeof(ISingleFilter <>).MakeGenericType(elementType)); } else { field = new ArrayFilterFieldDescriptor(Context, property, elementType); } definition = field.CreateDefinition(); return(true); } if (type.IsClass) { var field = new ObjectFilterFieldDescriptor( Context, property, property.PropertyType); definition = field.CreateDefinition(); return(true); } definition = null; return(false); }
private bool TryCreateImplicitFilter( PropertyInfo property, out FilterFieldDefintion definition) { var type = property.PropertyType; if (type.IsGenericType && Nullable.GetUnderlyingType(type) is Type nullableType) { type = nullableType; } if (type == typeof(string)) { var field = new StringFilterFieldDescriptor(Context, property); definition = field.CreateDefinition(); return(true); } if (type == typeof(bool)) { var field = new BooleanFilterFieldDescriptor( Context, property); definition = field.CreateDefinition(); return(true); } if (IsComparable(property.PropertyType)) { var field = new ComparableFilterFieldDescriptor( Context, property); definition = field.CreateDefinition(); return(true); } if (typeof(IEnumerable).IsAssignableFrom(type)) { ArrayFilterFieldDescriptor field; var genericTypeArgument = type.GetGenericArguments()[0]; if (genericTypeArgument.IsGenericType && Nullable.GetUnderlyingType(genericTypeArgument) is Type nullableEnumerableType) { genericTypeArgument = nullableEnumerableType; } if (genericTypeArgument == typeof(string) || genericTypeArgument == typeof(bool) || genericTypeArgument == typeof(bool?) || typeof(IComparable).IsAssignableFrom(genericTypeArgument)) { field = new ArrayFilterFieldDescriptor( Context, property, typeof(ISingleFilter <>).MakeGenericType(genericTypeArgument) ); } else { field = new ArrayFilterFieldDescriptor(Context, property, genericTypeArgument); } definition = field.CreateDefinition(); return(true); } if (type.IsClass) { var field = new ObjectFilterFieldDescriptor( Context, property, property.PropertyType); definition = field.CreateDefinition(); return(true); } definition = null; return(false); }