コード例 #1
0
        public static void ApplyFilters(IListQueryBuilder listQuery, IDbQueryBuilder queryBuilder)
        {
            if (listQuery.Configuration.QueryDefinition.Filters != null)
            {
                var where = new DbQueryWhereClause(queryBuilder.Root, Csg.Data.Sql.SqlLogic.And);

                //tODO: IsFilterable is not being enforced. Shoult it be?

                foreach (var filter in listQuery.Configuration.QueryDefinition.Filters)
                {
                    var hasConfig = listQuery.Configuration.Validations.TryGetValue(filter.Name, out ListFieldMetadata validationField);

                    if (listQuery.Configuration.Handlers.TryGetValue(filter.Name, out ListQueryFilterHandler handler))
                    {
                        handler(where, filter, validationField);
                    }
                    else if (hasConfig || !listQuery.Configuration.UseValidation)
                    {
                        where.AddFilter(filter.Name, filter.Operator ?? ListFilterOperator.Equal, filter.Value, validationField?.DataType ?? System.Data.DbType.String, validationField?.DataTypeSize);
                    }
                    else if (listQuery.Configuration.UseValidation)
                    {
                        throw new Exception($"No handler is defined for the filter '{filter.Name}'.");
                    }
                }

                if (where.Filters.Count > 0)
                {
                    where.ApplyToQuery(queryBuilder);
                }
            }
        }
コード例 #2
0
        public IDbQueryContext <TModel> Where(Expression <Func <TModel, object> > conditionExpression, DbQueryConditionOperators Operator = DbQueryConditionOperators.And)
        {
            var clause = new DbQueryWhereClause <TModel>()
            {
                Clause   = conditionExpression,
                Operator = Operator
            };

            _whereClauses.Add(clause);

            return(this);
        }
コード例 #3
0
        public TModel ElementAt(long position, Expression <Func <TModel, object> > conditionExpression = null)
        {
            if (conditionExpression == null)
            {
                return(GetDataModelByPosition(QueryItemPosition.ElementAt, position));
            }

            var clause = new DbQueryWhereClause <TModel>()
            {
                Clause = conditionExpression
            };

            _whereClauses.Add(clause);

            return(GetDataModelByPosition(QueryItemPosition.ElementAt, position));
        }
コード例 #4
0
        public TModel Last(Expression <Func <TModel, object> > conditionExpression = null)
        {
            if (conditionExpression == null)
            {
                return(GetDataModelByPosition(QueryItemPosition.Last));
            }

            var clause = new DbQueryWhereClause <TModel>()
            {
                Clause = conditionExpression
            };

            _whereClauses.Add(clause);

            return(GetDataModelByPosition(QueryItemPosition.Last));
        }
コード例 #5
0
        public IDbQueryContext <TModel> TakeWhile(int itemCount, Expression <Func <TModel, object> > conditionExpression = null)
        {
            if (conditionExpression == null)
            {
                return(Take(itemCount));
            }

            var clause = new DbQueryWhereClause <TModel>()
            {
                Clause   = conditionExpression,
                Operator = DbQueryConditionOperators.And
            };

            _whereClauses.Add(clause);
            _takeCount = itemCount;

            return(this);
        }