# Fluent Builder API The fluent API is built around interfaces like `IDynamicSelectQueryBuilder`, `IDynamicInsertQueryBuilder`, `IDynamicUpdateQueryBuilder`, and `IDynamicDeleteQueryBuilder`. ## Core Select Flow ```csharp using (var query = db.From("users", "u") .Where("u.id", 19) .SelectColumn("u.first", "u.last")) { var result = query.Execute().ToList(); } ``` ## Typed Select ```csharp using (var query = db.From("u") .Where(x => x.u.id == 19) .Select(x => x.u.All())) { var users = query.Execute().ToList(); } ``` ## Parser Lambda Patterns The parser supports patterns tested in `DynamORM.Tests/Select/ParserTests.cs`: - `From(x => x.dbo.Users)` - `From(x => x.dbo.Users.As(x.u))` - `Join(x => x.Left().Accounts.As(x.a).On(x.a.userId == x.u.id))` - `Where(x => x.Or(x.u.id > 100))` - `Select(x => x.u.first.As(x.firstName))` - `GroupBy(x => x.u.last)` - `Having(x => x.Count() > 1)` - `OrderBy(x => x.u.id.Desc())` ## Subqueries ```csharp var sub = new DynamicSelectQueryBuilder(db).From(x => x.dbo.Users); using (var query = new DynamicSelectQueryBuilder(db) .From(x => x(sub).As("u")) .Select(x => x.u.All())) { var rows = query.Execute().ToList(); } ``` ## Scalar Helpers ```csharp var count = db.From() .Select(x => x.Count()) .ScalarAs(); ``` ## Modify Builders ```csharp db.Insert("users").Values("code", "301").Values("first", "Ada").Execute(); db.Update("users") .Values("first", "Alicia") .Where("id", 301) .Execute(); db.Delete("users") .Where("id", 301) .Execute(); ``` ## SQL Inspection You can inspect generated SQL from builder objects: ```csharp var sql = query.CommandText(); ``` Command text assertions are heavily used in parser tests.