Skip to main content

IColligoQueryable<T> API reference

IColligoQueryable<T> is a value record in Colligo.Queryable that builds and executes SQL queries through a FluentSQL AST and a DataEngine connection.

note

Method bodies are compiled only when {$DEFINE QUERYABLE} is active.

Constructors

ConstructorDescription
Create(AQueryable: IColligoQueryableBase<T>)Wrap an existing queryable
CreateForDatabase(AInitializer: TConnectionInitializer)Lambda-style init
CreateForDatabase(ADatabase, AConnection [, ACQL])Explicit parameters

Query building operators (intermediate)

MethodSQL clauseNotes
From(ATableName)FROM
From(ATableName, AAlias)FROM … AS
Select(AColumns)SELECTDefaults to *
Select(AExpressions)SELECTArray of IColligoQueryExpression
Where(AExpression: string)WHERERaw SQL fragment
Where(AExpression: array of const)WHEREVariadic
Where(AExpression: IColligoQueryExpression)WHEREType-safe expression
AndOpe(…)ANDString, variadic, or expression
OrOpe(…)ORString, variadic, or expression
InnerJoin(ATableName [, AAlias])INNER JOIN
OnCond(AExpression)ONString or variadic
Alias(AAlias)Sets alias for current table
GroupBy(AColumnName)GROUP BY
GroupBy<TKey>(AExpression)GROUP BYReturns IGroupByQueryable<TKey, T>
OrderBy(AColumnName)ORDER BY
OrderBy(AExpression)ORDER BYExpression
OrderByDesc(AExpression)ORDER BY … DESC
ThenBy(AExpression)Secondary ORDER BYAscending
ThenByDescending(AExpression)Secondary ORDER BYDescending
Take(ACount)FIRST N / LIMIT NDialect-dependent
Skip(ACount)SKIP N / OFFSET NDialect-dependent
DistinctSELECT DISTINCT
Union(ASecond)UNION
Intersect(ASecond)INTERSECT
Exclude(ASecond)EXCEPT / MINUSDialect-dependent
Join<TInner, TResult>(AInner, AOuterKey, AInnerKey, AResultColumns)INNER JOINReturns IColligoQueryable<TResult>

Expression factory

function QE: IColligoQueryExpression;

Returns a typed expression builder scoped to the current database dialect.

var LQ: IColligoQueryable<TProduct>;
// ...
var LExpr := LQ.QE.Field('PRICE').GreaterThan(50.0);
LQ := LQ.Where(LExpr);

Terminal operators

MethodReturnsDescription
ToArrayIFluentArray<T>Execute and return all rows
ToListIFluentList<T>Execute and return list
FirstTFIRST 1, raises if empty
First(AExpression)TWith WHERE, raises if empty
FirstOrDefaultTFIRST 1, returns Default(T) if empty
FirstOrDefault(AExpression)TWith WHERE
LastTORDER BY … DESC FIRST 1
Last(AExpression)TWith WHERE
LastOrDefaultTAs Last but safe
LastOrDefault(AExpression)TWith WHERE
SingleTExactly one row; raises otherwise
Single(AExpression)TWith WHERE
SingleOrDefaultTZero or one row
SingleOrDefault(AExpression)TWith WHERE
ElementAt(AIndex)TSkip(N).Take(1)
ElementAtOrDefault(AIndex)TSafe version
AnyBooleanCOUNT(*) > 0
Any(AExpression)BooleanWith WHERE
All(AExpression)BooleanCOUNT with negated WHERE = 0
Contains(AValue, AComparer)BooleanIn-memory check on fetched data
CountIntegerSELECT COUNT(*)
Count(AExpression)IntegerWith WHERE
LongCountInt64SELECT COUNT(*) as Int64
LongCount(AExpression)Int64With WHERE
MinTSELECT MIN(*)
Min(AComparer)TIn-memory min
Min<TResult>(AFieldName [, AAlias])TResultSELECT MIN(field)
MinBy(AFieldName)TORDER BY field ASC FIRST 1
MaxTSELECT MAX(*)
Max(AComparer)TIn-memory max
Max<TResult>(AFieldName [, AAlias])TResultSELECT MAX(field)
MaxBy(AFieldName)TORDER BY field DESC FIRST 1
Sum<TResult>(AFieldName [, AAlias])TResultSELECT SUM(field)
Average<TResult>(AFieldName [, AAlias])TResultSELECT AVG(field)
AsStringstringReturn generated SQL without executing
AsEnumerableIColligoEnumerable<T>Convert to in-memory pipeline

IColligoQueryExpression operators

IColligoQueryExpression (unit Colligo.Expression) constructs typed SQL predicates:

MethodSQL fragment
Field(AFieldName)Column reference
Equal(AValue)field = value
NotEqual(AValue)field <> value
GreaterThan(AValue)field > value
GreaterThanOrEqual(AValue)field >= value
LessThan(AValue)field < value
LessThanOrEqual(AValue)field <= value
IsNullfield IS NULL
IsNotNullfield IS NOT NULL
Like(AValue)field LIKE value
NotLike(AValue)field NOT LIKE value
Contains(AValue)field LIKE '%value%'
StartsWith(AValue)field LIKE 'value%'
EndsWith(AValue)field LIKE '%value'
InValues(AValues)field IN (...)
NotInValues(AValues)field NOT IN (...)
Exists(AValue)EXISTS (...)
NotExists(AValue)NOT EXISTS (...)
AndWith(AFieldName)AND field
OrWith(AFieldName)OR field
NegateNOT (...)
SubExpression(AFieldName)Nested predicate
EqualIgnoreCase(AValue)Case-insensitive equal (dialect-dependent)

Values are overloaded for Integer, Extended, string, TDate, TDateTime, TGUID.