示例#1
0
        public void AddFilter <TQuery, TEntity>(IFilterExpression <TEntity, TId> expression)
            where TQuery : class
            where TEntity : IEntity <TId>
        {
            var filter = GetFilter <TQuery, TEntity>();

            foreach (var entry in filter.Entries.Values)
            {
                expression.AddVariable(entry.Name, entry.Predicate);
            }
        }
示例#2
0
 public static LogicExpression Or(this IFilterExpression a, IFilterExpression b)
 {
     if (a is ILogicExpression)
     {
         (a as ILogicExpression).WithBracket = true;
     }
     if (b is ILogicExpression)
     {
         (b as ILogicExpression).WithBracket = true;
     }
     return(new LogicExpression(a, LogicOperator.Or, b));
 }
示例#3
0
        private static Func <ILiquidValue, LiquidExpressionResult> InitialCast(
            ITemplateContext ctx, IFilterExpression initialExpression)
        {
            return(expressionConstant =>
            {
                var result = expressionConstant != null
                    ? CreateCastFilter(expressionConstant.GetType(), initialExpression.SourceType)
                             .Apply(ctx, expressionConstant)
                    : LiquidExpressionResult.Success(new None <ILiquidValue>());

                return result;
            });
        }
示例#4
0
        private static string GetExpression(IFilterExpression filter)
        {
            string filterExpression  = string.Empty;
            string propertyFormatted = filter.PropertyName.Replace("Entity.", "").Replace(".", "/");

            switch (filter.FilterExpression)
            {
            case FilterExpression.FilterType.GreaterThan:
                filterExpression = string.Concat(propertyFormatted, " gt ", GetValueFormatted(filter.FilterValue));
                break;

            case FilterExpression.FilterType.GreaterThanOrEqualTo:
                filterExpression = string.Concat(propertyFormatted, " ge ", GetValueFormatted(filter.FilterValue));
                break;

            case FilterExpression.FilterType.LessThan:
                filterExpression = string.Concat(propertyFormatted, " lt ", GetValueFormatted(filter.FilterValue));
                break;

            case FilterExpression.FilterType.LessThanOrEqualTo:
                filterExpression = string.Concat(propertyFormatted, " le ", GetValueFormatted(filter.FilterValue));
                break;

            case FilterExpression.FilterType.IsNull:
                filterExpression = string.Concat(propertyFormatted, " eq null");
                break;

            case FilterExpression.FilterType.IsNotNull:
                filterExpression = string.Concat(propertyFormatted, " not eq null");
                break;

            case FilterExpression.FilterType.Contains:
                filterExpression = string.Concat("contains(tolower(", propertyFormatted, "), '", filter.FilterValue.ToString().ToLower(), "')");
                break;

            case FilterExpression.FilterType.IsEnum:
                filterExpression = string.Concat(propertyFormatted, " eq ", filter.PropertyType.FullName, "'", filter.FilterValue, "'");
                break;

            default:
                filterExpression = string.Concat(propertyFormatted, " eq ", GetValueFormatted(filter.FilterValue));
                break;
            }

            return(filterExpression);
        }
示例#5
0
        protected override string ExpressionFilterConverter(IFilterExpression <T> expression)
        {
            if (expression.PropertyType == typeof(byte[]))
            {
                return(TableQuery.GenerateFilterConditionForBinary(expression.PropertyName, GetInstruction(expression.Comparator), (byte[])expression.PropertyValue));
            }

            if (expression.PropertyType == typeof(bool) || expression.PropertyType == typeof(bool?))
            {
                return(TableQuery.GenerateFilterConditionForBool(expression.PropertyName, GetInstruction(expression.Comparator), (bool)expression.PropertyValue));
            }

            if (expression.PropertyType == typeof(DateTime) || expression.PropertyType == typeof(DateTime?))
            {
                return(TableQuery.GenerateFilterConditionForDate(expression.PropertyName, GetInstruction(expression.Comparator), (DateTime)expression.PropertyValue));
            }

            if (expression.PropertyType == typeof(DateTimeOffset) || expression.PropertyType == typeof(DateTimeOffset?))
            {
                return(TableQuery.GenerateFilterConditionForDate(expression.PropertyName, GetInstruction(expression.Comparator), (DateTimeOffset)expression.PropertyValue));
            }

            if (expression.PropertyType == typeof(double) || expression.PropertyType == typeof(double?))
            {
                return(TableQuery.GenerateFilterConditionForDouble(expression.PropertyName, GetInstruction(expression.Comparator), (double)expression.PropertyValue));
            }

            if (expression.PropertyType == typeof(Guid) || expression.PropertyType == typeof(Guid?))
            {
                return(TableQuery.GenerateFilterConditionForGuid(expression.PropertyName, GetInstruction(expression.Comparator), (Guid)expression.PropertyValue));
            }

            if (expression.PropertyType == typeof(int) || expression.PropertyType == typeof(int?))
            {
                return(TableQuery.GenerateFilterConditionForInt(expression.PropertyName, GetInstruction(expression.Comparator), (int)expression.PropertyValue));
            }

            if (expression.PropertyType == typeof(long) || expression.PropertyType == typeof(long?))
            {
                return(TableQuery.GenerateFilterConditionForLong(expression.PropertyName, GetInstruction(expression.Comparator), (long)expression.PropertyValue));
            }

            return(TableQuery.GenerateFilterCondition(expression.PropertyName, GetInstruction(expression.Comparator), expression.PropertyValue?.ToString() ?? string.Empty));
        }
示例#6
0
        public static LogicExpression AnyEqVarParam(this IEnumerable <IColumnExpression> cols)
        {
            IFilterExpression filter = null;
            LogicExpression   logic  = null;

            foreach (var col in cols)
            {
                if (filter == null)
                {
                    filter = col.EqVarParam();
                }
                else
                {
                    logic  = filter.Or(col.EqVarParam());
                    filter = logic;
                }
                //filter = filter == null ? col.EqVarParam() as IFilterExpression : filter.Or(col.EqVarParam());
            }
            return(logic);
        }
示例#7
0
        public static LogicExpression AnyEq(this IEnumerable <IColumnExpression> cols, IEnumerable <IValueExpression> values)
        {
            IFilterExpression filter = null;
            LogicExpression   logic  = null;
            var em = values.GetEnumerator();

            foreach (var col in cols)
            {
                em.MoveNext();
                if (filter == null)
                {
                    filter = col.Eq(em.Current);
                }
                else
                {
                    logic  = filter.Or(col.Eq(em.Current));
                    filter = logic;
                }
                //filter = filter == null ? col.Eq(em.Current) as IFilterExpression : filter.Or(col.Eq(em.Current));
            }
            return(logic);
        }
        protected virtual string Build(IFilterExpression <T> expression)
        {
            if (expression == null)
            {
                return(string.Empty);
            }
            StringBuilder queryBuilder = new StringBuilder();

            if (expression.PropertyType != null)
            {
                var strExpression = ExpressionFilterConverter(expression);
                queryBuilder.Append(strExpression);
            }
            if (expression.Group.Count > 0)
            {
                foreach (var operation in expression.Group)
                {
                    if (!string.IsNullOrEmpty(InstructionsProvider.Get(operation.GroupOperator)))
                    {
                        queryBuilder.Append($" {InstructionsProvider.Get(operation.GroupOperator)} (");
                    }
                    queryBuilder.Append(Build(operation));
                    if (!string.IsNullOrEmpty(InstructionsProvider.Get(operation.GroupOperator)))
                    {
                        queryBuilder.Append(")");
                    }
                }
            }
            if (!string.IsNullOrEmpty(expression.Operator))
            {
                queryBuilder.Append($" {InstructionsProvider.Get(expression.Operator)} ");
            }
            queryBuilder.Append(Build(expression.NextOperation));

            return(queryBuilder.ToString().Trim());
        }
示例#9
0
 public Task <TResult> GetByAsync <TResult>(ThaGet.Cqrs.Selector.Abstractions.ISelectExpression <TestEntity, TResult, int> selectExpression, IIncludeExpression <TestEntity, int> includeExpression, IFilterExpression <TestEntity, int> filterExpression) where TResult : class
 {
     throw new NotImplementedException();
 }
示例#10
0
 public static ISelectStatement Where(this ISelectStatement select, IFilterExpression filter)
 {
     select.Where = new WhereClause(filter);
     return(select);
 }
示例#11
0
 /// <summary>
 /// Add a new <see cref="IFilterExpression"></see> to the <see cref="IFilterGroup"></see>.
 /// </summary>
 /// <param name="filterGroup">
 /// A <see cref="IFilterGroup"></see> to modify.
 /// </param>
 /// <param name="filter">
 /// An <see cref="IFilterExpression"></see> to add.
 /// </param>
 /// <returns>
 /// A reference to the <paramref name="filterGroup"/> after the
 /// operation has completed.
 /// </returns>
 public static IFilterGroup AddExpression(this IFilterGroup filterGroup, IFilterExpression filter)
 {
     filterGroup.Filters.Add(filter);
     return(filterGroup);
 }
示例#12
0
 public NotFilterExpression(IFilterExpression negatedExpression)
 {
     NegatedExpression = negatedExpression ?? throw new ArgumentNullException(nameof(negatedExpression));
 }
示例#13
0
 private static bool NeedsACast(Type expectedInputType, IFilterExpression filterExpression)
 {
     return(expectedInputType != null && !filterExpression.SourceType.IsAssignableFrom(expectedInputType));
 }
 protected virtual string ExpressionFilterConverter(IFilterExpression <T> expression)
 {
     return($"{expression.PropertyName} {InstructionsProvider.Get(expression.Comparator)} '{expression.PropertyValue}'");
 }
 public CompositeFilterExpression Add(IFilterExpression filterExpression)
 {
     return(this);
 }
示例#16
0
        public static ISelectStatement FullJoin(this ISelectStatement select, ITableExpression table, IFilterExpression on)
        {
            IJoinExpression join = new JoinExpression(Operator.FullJoin, table, on);

            return(Join(select, join));
        }
 protected BaseQueryExpressionBuilder(IFilterExpression <T> query, IQueryInstructionsProvider instructionsProvider)
 {
     Query = query;
     InstructionsProvider = instructionsProvider;
 }
示例#18
0
 public Task <TestEntity> GetByAsync(IFilterExpression <TestEntity, int> filterExpression)
 {
     throw new NotImplementedException();
 }
示例#19
0
 public Task <ICollection <TestEntity> > FindAllByAsync(IIncludeExpression <TestEntity, int> includeExpression, IFilterExpression <TestEntity, int> filterExpression)
 {
     throw new NotImplementedException();
 }
示例#20
0
 public static IUpdateStatement Where(this IUpdateStatement update, IFilterExpression filter)
 {
     update.Where = new WhereClause(filter);
     return(update);
 }
示例#21
0
 public Filter(string name, IFilterExpression rootExpression)
 {
     Name           = name ?? throw new ArgumentNullException(nameof(name));
     RootExpression = rootExpression ?? throw new ArgumentNullException(nameof(rootExpression));
     m_Evaluator    = new ExpressionEvaluationVisitor(this.RootExpression);
 }
示例#22
0
 public ExpressionEvaluationVisitor(IFilterExpression rootExpression)
 {
     m_RootExpression = rootExpression ?? throw new ArgumentNullException(nameof(rootExpression));
 }
示例#23
0
 public static Expression <Func <TEntity, bool> > GetFilter <TEntity>(this IFilterExpression <TEntity> filter)
 {
     return(filter.GetFilterExpressions().DefaultIfEmpty(GetDefaultExpression <TEntity>()).Combine(Expression.AndAlso));
 }
示例#24
0
 public Task <ThaGet.Cqrs.Domain.Abstractions.IPagination <TResultType> > GetPaginationAsync <TResultType>(ThaGet.Cqrs.Selector.Abstractions.ISelectExpression <TestEntity, TResultType, int> selectExpression, IIncludeExpression <TestEntity, int> includeExpression, IFilterExpression <TestEntity, int> filterExpression, ISortExpression <TestEntity, int> sortExpression, int skip, int take) where TResultType : class
 {
     throw new NotImplementedException();
 }
示例#25
0
 public static ISelectStatement Join(this ISelectStatement select, ITableExpression table, IFilterExpression on)
 {
     return(Join(select, table, on, Operator.InnerJoin));
 }
示例#26
0
 public static ISelectStatement H(this ISelectStatement select, IFilterExpression filter)
 {
     return(Having(select, filter));
 }
示例#27
0
        public IQueryable <TItem> FilterList <TItem>(IQueryable <TItem> source)
        {
            if (Filters?.Any() != true)
            {
                return(source);
            }

            var sourceExpression = _getFieldExpression.Parameters[0];

            Expression lambda = null;

            if (this.FilterType == TableFilterType.List)
            {
                lambda = Expression.Constant(false, typeof(bool));
            }

            IFilterExpression filterExpression = null;

            if (FilterType == TableFilterType.FieldType)
            {
                filterExpression = _filterExpressionResolver.GetFilterExpression();
            }
            foreach (var filter in Filters)
            {
                if (this.FilterType == TableFilterType.List)
                {
                    lambda = Expression.OrElse(lambda !, Expression.Invoke(OnFilter, Expression.Constant(filter.Value, typeof(TField)), _getFieldExpression.Body));
                }
                else // TableFilterType.FieldType
                {
                    if (filter.Value == null && (filter.FilterCompareOperator != TableFilterCompareOperator.IsNull && filter.FilterCompareOperator != TableFilterCompareOperator.IsNotNull))
                    {
                        continue;
                    }
                    Expression constantExpression = null;
                    if (filter.FilterCompareOperator == TableFilterCompareOperator.IsNull || filter.FilterCompareOperator == TableFilterCompareOperator.IsNotNull)
                    {
                        constantExpression = Expression.Constant(null, typeof(TField));
                    }
                    else
                    {
                        constantExpression = Expression.Constant(filter.Value, typeof(TField));
                    }
                    var expression = filterExpression !.GetFilterExpression(filter.FilterCompareOperator, _getFieldExpression.Body, constantExpression);
                    if (lambda == null)
                    {
                        lambda = expression;
                    }
                    else
                    {
                        if (filter.FilterCondition == TableFilterCondition.And)
                        {
                            lambda = Expression.AndAlso(lambda, expression);
                        }
                        else
                        {
                            lambda = Expression.OrElse(lambda, expression);
                        }
                    }
                }
            }
            if (lambda == null)
            {
                return(source);
            }
            else
            {
                return(source.Where(Expression.Lambda <Func <TItem, bool> >(lambda, sourceExpression)));
            }
        }
示例#28
0
 public Composition(IFilterExpression <I1, I2> item1, FilterCompositionOperator combiner, IFilterExpression <I1, I2> item2)
 {
     Item1    = item1;
     Combiner = combiner;
     Item2    = item2;
 }
示例#29
0
 public void AddFilter <TQuery, TEntity>(IFilterExpression <TEntity, int> expression)
     where TQuery : class
     where TEntity : IEntity <int>
 {
     throw new NotImplementedException();
 }
示例#30
0
 public static ISelectStatement Having(this ISelectStatement select, IFilterExpression filter)
 {
     select.Having = new HavingClause(filter);
     return(select);
 }