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); } } }
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); }
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)); }
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)); }
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); }