Skip to main content

Extension Methods

Reference

ToSql — ValiFlow overload

Signature

SqlResult ToSql<T>(this ValiFlow<T> flow, ISqlDialect dialect)

Description Translates all conditions built in a ValiFlow<T> into a parameterized SQL WHERE fragment (without the WHERE keyword).

Example

var filter = new ValiFlow<User>()
.NotNull(x => x.Name)
.GreaterThan(x => x.Age, 18);

var sql = filter.ToSql(new SqlServerDialect());
// sql.Sql → "[Name] IS NOT NULL AND [Age] > @p0"
// sql.Parameters → { "p0": 18 }

ToSql — ValiFlowQuery overload

Signature

SqlResult ToSql<T>(this ValiFlowQuery<T> flow, ISqlDialect dialect)

Description Same as above but for ValiFlowQuery<T> instances.


ToSql — Expression overload

Signature

SqlResult ToSql<T>(this Expression<Func<T, bool>> expression, ISqlDialect dialect)

Description Translates a prebuilt Expression<Func<T, bool>> directly, without requiring a ValiFlow<T> wrapper.

Example

Expression<Func<User, bool>> expr = u => u.IsActive && u.Age > 18;
var sql = expr.ToSql(new PostgreSqlDialect());
// sql.Sql → "\"IsActive\" = true AND \"Age\" > @p0"

ToSqlCount — ValiFlow overload

Signature

SqlQueryResult ToSqlCount<T>(
this ValiFlow<T>? flow,
ISqlDialect dialect,
string? tableName = null) where T : class

Description Generates a SELECT COUNT(*) FROM [table] WHERE ... query. Pass null as flow to count all rows.

Example

var countResult = new ValiFlow<User>()
.EqualTo(x => x.IsActive, true)
.ToSqlCount(new SqlServerDialect(), "Users");

// countResult.Sql → "SELECT COUNT(*) FROM [Users] WHERE [IsActive] = @p0"
var count = connection.ExecuteScalar<int>(countResult.Sql, countResult.Parameters);

ToSqlCount — ValiFlowQuery overload

Signature

SqlQueryResult ToSqlCount<T>(
this ValiFlowQuery<T>? flow,
ISqlDialect dialect,
string? tableName = null) where T : class

Description Same as above for ValiFlowQuery<T>.


Advanced Examples

1) Count with table name

var countResult = new ValiFlow<User>()
.EqualTo(x => x.IsActive, true)
.ToSqlCount(new SqlServerDialect(), tableName: "Users");

2) Expression overload

Expression<Func<Order, bool>> expr = o => o.Total > 100m && o.Status == "Open";
var sql = expr.ToSql(new PostgreSqlDialect());