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); }
public EFValueFilter(EFComparison comparison, object comparisonValue, EFOperation?operation) { Comparison = comparison; ComparisonValue = comparisonValue; Operation = operation; }
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); }