Dynamic projection
Select returned columns
static readonly QueryCommand SearchAlbums = new("""
?SELECT
AlbumId AS Id!,
Title,
ReleaseYear
FROM albums
""");
var builder = SearchAlbums.StartBuilder();
builder.Use("Title");
List<DynaObject> rows = builder.Query<List<DynaObject>>(cnn);
SELECT
AlbumId AS Id,
Title
FROM albums
Projection key from final alias
?SELECT
AlbumId AS Id,
Title,
ReleaseYear AS Year
FROM albums
var builder = SearchAlbums.StartBuilder();
builder.Use("Year");
Calculated columns can expose an explicit key with an alias.
?SELECT
AlbumId AS Id!,
Price * Quantity AS Total
FROM invoice_lines
Required projection entry
?SELECT
AlbumId AS Id!,
Title,
ReleaseYear
FROM albums
Id remains even when it is not selected by the caller.
Supporting column group
?SELECT
ArtistId&,
ArtistName AS Artist,
AlbumId AS Id!
FROM albums
Selecting Artist keeps both ArtistId and ArtistName.
Projection entry with a marker
?SELECT
AlbumId AS Id!,
/*WithTitle*/ Title
FROM albums
The projection key and the marker remain separate conditions.
UNION
?SELECT Id!, Name
FROM active_artists
UNION ALL
?SELECT Id!, Name
FROM archived_artists
The same alias key controls matching projection entries in both branches.
CTE
WITH albums_cte AS
(
?SELECT AlbumId AS Id!, Title, ReleaseYear
FROM albums
)
SELECT * FROM albums_cte
Optional modifier
???Distinct DISTINCT
?SELECT AlbumId AS Id!, Title
FROM albums
var builder = SearchAlbums.StartBuilder();
builder.Use("Distinct");
builder.Use("Title");