private void PredicateBuilderByExpressions( IDictionary <PropertyInfo, SearchPredicatePropertyInfo> propertyInfoByPropName) { foreach (var(prop, searchPredicatePropertyInfo) in propertyInfoByPropName) { PropertyOrField = searchPredicatePropertyInfo.PropertyOrField; EntityName = searchPredicatePropertyInfo.EntityName; FilterPropertyValue = searchPredicatePropertyInfo.PropertyValue; FilterPropertyType = prop.PropertyType; EntityPropertyType = searchPredicatePropertyInfo.InstanceTypeOfProperty .GetProperty(EntityName.ToUpper())?.PropertyType; var predicateBitwiseOperation = searchPredicatePropertyInfo.PredicateBitwiseOperation; if (FilterPropertyValue is string _) { var expression = StringContainsExpr(); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else if (FilterPropertyValue is StringFilter stringFilter) { var expression = StringFilterContainsExpr(stringFilter); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else if (FilterPropertyValue is DateTimeFromToFilter dateTimeFromToFilter) { var expression = DateTimeExpr(dateTimeFromToFilter, Item); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else if (FilterPropertyValue.GetType().IsGenericType&& FilterPropertyValue.GetType().GetGenericTypeDefinition() == typeof(NumericFilter <>)) { var expression = NumericFilterExpr(Item); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else if (!searchPredicatePropertyInfo.IsEntityTypeProperty) { var expression = CollectionContainsExpr(); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else { var expression = DefaultExpr(); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } } }
private void PredicateBuilderByExpressions( IDictionary <PropertyInfo, SearchPredicatePropertyInfo> propertyInfoByPropName) { foreach (var(prop, searchPredicatePropertyInfo) in propertyInfoByPropName) { PropertyOrField = searchPredicatePropertyInfo.PropertyOrField; EntityName = searchPredicatePropertyInfo.EntityName; FilterPropertyValue = searchPredicatePropertyInfo.PropertyValue; FilterPropertyType = prop.PropertyType; EntityPropertyType = searchPredicatePropertyInfo.InstanceTypeOfProperty .GetProperty(EntityName.ToUpper(), BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance)?.PropertyType; var predicateBitwiseOperation = searchPredicatePropertyInfo.PredicateBitwiseOperation; if (FilterPropertyValue is string _) { var expression = StringContainsExpr(); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else if (FilterPropertyValue is StringFilter stringFilter) { var expression = StringFilterContainsExpr(stringFilter); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else if (FilterPropertyValue is DateTimeFromToFilterComplex dateTimeFromToFilterComplex) { if (dateTimeFromToFilterComplex.DateFrom != null && !dateTimeFromToFilterComplex.DateFrom.DateTime.HasValue) { throw new ArgumentNullException(nameof(dateTimeFromToFilterComplex.DateFrom)); } var expression = DateTimeExpr(dateTimeFromToFilterComplex, Item); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else if (FilterPropertyValue is DateTimeFromToFilter dateTimeFromToFilter) { if (!dateTimeFromToFilter.DateFrom.HasValue) { throw new ArgumentNullException(nameof(dateTimeFromToFilter.DateFrom)); } var expression = DateTimeExpr(dateTimeFromToFilter, Item); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else if (FilterPropertyValue.GetType().IsGenericType&& FilterPropertyValue.GetType().GetGenericTypeDefinition() == typeof(NumericFilter <>)) { var expression = NumericFilterExpr(); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else if (!searchPredicatePropertyInfo.IsEntityTypeProperty) { var expression = CollectionContainsExpr(); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } else { var expression = DefaultExpr(); AutoPredicate.PredicateByOperationType(predicateBitwiseOperation, expression); } } }