Exemple #1
0
 public bool AddLast(EFOperation operation, EFComparison comparison, object comparisonValue)
 {
     if (_filters.Count == 0)
     {
         _filters.AddLast(new EFValueFilter(comparison, comparisonValue, null));
     }
     else
     {
         _filters.AddLast(new EFValueFilter(comparison, comparisonValue, operation));
     }
     Filters = _filters.ToArray();
     IsEmpty = false;
     return(true);
 }
Exemple #2
0
 public EFValueFilter(EFComparison comparison, object comparisonValue, EFOperation?operation)
 {
     Comparison      = comparison;
     ComparisonValue = comparisonValue;
     Operation       = operation;
 }
Exemple #3
0
        private Linq.Expressions.Expression GetExpression(ParameterExpression modelExp, Type propertyType, string propertyName, EFComparison comparison, object comparisonValue)
        {
            var propertyExp = Linq.Expressions.Expression.Property(modelExp, propertyName);
            var valueExp    = Linq.Expressions.Expression.Constant(comparisonValue);
            var trueExp     = Linq.Expressions.Expression.Constant(true);

            switch (comparison)
            {
            case EFComparison.Equal:
                if (propertyType == typeof(string) && string.IsNullOrEmpty(comparisonValue?.ToString()))
                {
                    return(Linq.Expressions.Expression.Call(typeof(string), nameof(string.IsNullOrEmpty), null, propertyExp));   // string.IsNullOrEmpty(i.PropertyName)
                }
                else
                {
                    return(Linq.Expressions.Expression.Equal(propertyExp, valueExp));   //i.PropertyName = value;
                }

            case EFComparison.NotEqual:
                if (propertyType == typeof(string) && string.IsNullOrEmpty(comparisonValue?.ToString()))                               // string.IsNullOrEmpty(i.PropertyName)==false
                {
                    var isNullExp = Linq.Expressions.Expression.Call(typeof(string), nameof(string.IsNullOrEmpty), null, propertyExp); // string.IsNullOrEmpty(i.PropertyName)
                    return(Linq.Expressions.Expression.NotEqual(isNullExp, trueExp));                                                  //string.IsNullOrEmpty(i.PropertyName) != true
                }
                else
                {
                    return(Linq.Expressions.Expression.NotEqual(propertyExp, valueExp));   //i.PropertyName != value;
                }

            case EFComparison.GreaterThan:
                return(Linq.Expressions.Expression.GreaterThan(propertyExp, valueExp));   //i.PropertyName > value;

            case EFComparison.GreaterThanOrEqual:
                return(Linq.Expressions.Expression.GreaterThanOrEqual(propertyExp, valueExp));   //i.PropertyName >= value;

            case EFComparison.LessThan:
                return(Linq.Expressions.Expression.LessThan(propertyExp, valueExp));   //i.PropertyName < value;

            case EFComparison.LessThanOrEqual:
                return(Linq.Expressions.Expression.LessThanOrEqual(propertyExp, valueExp));   //i.PropertyName <= value;

            case EFComparison.Contains:
                return(Linq.Expressions.Expression.Call(propertyExp, nameof(string.Contains), null, valueExp));   // i.PropertyName.Contains(value);

            case EFComparison.NotContains:
                var containsExp = Linq.Expressions.Expression.Call(propertyExp, nameof(string.Contains), null, valueExp);
                return(Linq.Expressions.Expression.NotEqual(containsExp, trueExp));   //i.PropertyName.Contains(value) != true

            case EFComparison.StartWith:
                return(Linq.Expressions.Expression.Call(propertyExp, nameof(string.StartsWith), null, valueExp));   // i.PropertyName.StartsWith(value);

            case EFComparison.EndWith:
                return(Linq.Expressions.Expression.Call(propertyExp, nameof(string.EndsWith), null, valueExp));   // i.PropertyName.EndsWith(value);

            default:
                break;
            }
            return(null);
        }