public QBuilder GroupBy <TField>(Expression <Func <TTable, TField> > fieldNameDescriber)
        {
            var fieldName = new FieldNameResolver().GetFieldName(fieldNameDescriber);

            QBuilder.UseGrouper()
            .GroupBy <TTable>(fieldName);
            return(QBuilder);
        }
Exemple #2
0
        public QBuilder PageBy <TField>(Expression <Func <TTable, TField> > fieldNameDescriber, uint page, ushort pageSize, bool orderAscending = true)
        {
            var fieldName   = new FieldNameResolver().GetFieldName(fieldNameDescriber);
            var tableName   = QBuilder.TableNameAliaser.GetTableAlias <TTable>();
            var range       = PageRangeCalculator.GetPageRange(0, page, pageSize);
            var orderClause = $"Order By `{fieldName}`";

            if (orderAscending)
            {
                orderClause += " Asc";
            }
            else
            {
                orderClause += " Desc";
            }
            QBuilder.SetSuffix($" {orderClause} Limit {range.Start},{range.PageSize}");
            return(QBuilder);
        }
        public QBuilder PageBy <TField>(Expression <Func <TTable, TField> > fieldNameDescriber, uint page, ushort pageSize, bool orderAscending = true)
        {
            new DataValidator()
            .AddFailureCondition(page < 1, $"Database query requested for page '{page}'. Pages must be greater than or equal to 1", false)
            .AddFailureCondition(pageSize < 1, $"Pages must have at least one record. Page size '{pageSize}' is not valid", false)
            .ThrowExceptionOnInvalidRules();
            const string rowNumber   = "RowNumber";
            string       orderSuffix = orderAscending ? "Asc" : "Desc";
            var          fieldName   = new FieldNameResolver().GetFieldName(fieldNameDescriber);
            var          table       = QBuilder.TableNameAliaser.GetTableAlias <TTable>();
            var          range       = PageRangeCalculator.GetPageRange(AbsoluteFirstRecordIndex, page, pageSize);

            QBuilder.UseSelector()
            .SetSelectPrefix($"ROW_NUMBER() OVER (ORDER BY [{table}].[{fieldName}] {orderSuffix}) AS {rowNumber},")
            .Then()
            .UseFilter();

            QBuilder.SetSuffix($"Where {rowNumber} >= {range.Start} AND {rowNumber} <= {range.End}");
            return(QBuilder);
        }
Exemple #4
0
 public WhereBuilder(QBuilder qBuilder) : base(qBuilder)
 {
     _whereConjunctionBuilder = new WhereConjuntionBuilder(this, qBuilder);
     _fieldNameResolver       = new FieldNameResolver();
 }
Exemple #5
0
 public TableBoundWhereBuilder(WhereBuilder whereBuilder, QBuilder qBuilder)
     : base(qBuilder)
 {
     _whereBuilder      = whereBuilder;
     _fieldNameResolver = new FieldNameResolver();
 }
Exemple #6
0
 public FieldNameResolverTests()
 {
     _fieldNameResolver = new FieldNameResolver(_mvcJsonOptions);
 }
 public FilterDescription <TTable> SetFilter <TField>(Expression <Func <TTable, TField> > fieldNameDescriptor, string filter)
 {
     FieldName = new FieldNameResolver().GetFieldName(fieldNameDescriptor);
     Filter    = filter;
     return(this);
 }
Exemple #8
0
 public TableBoundJoinBuilder(QBuilder qBuilder) : base(qBuilder)
 {
     _fieldNameResolver = new FieldNameResolver();
 }
Exemple #9
0
            public string GetFieldName <TField>(Expression <Func <TTable, TField> > expression)
            {
                var fieldNameResolver = new FieldNameResolver();

                return(fieldNameResolver.GetFieldName <TTable, TField>(expression));
            }
Exemple #10
0
 internal SelectBuilder(QBuilder qBuilder, string selectAlias)
     : base(qBuilder)
 {
     SelectAlias        = selectAlias;
     _fieldNameResolver = new FieldNameResolver();
 }