Class JoinedEntityBuilder<T1, T2>
Join builder over a two-table projection, produced by a Join/LeftJoin/RightJoin/
FullJoin/CrossJoin call.
public class JoinedEntityBuilder<T1, T2> : EntityBuilder<Projection<T1, T2>>, ICloneable
Type Parameters
T1T2
- Inheritance
-
EntityBuilder<Projection<T1, T2>>JoinedEntityBuilder<T1, T2>
- Implements
- Inherited Members
- Extension Methods
Remarks
The P in the name denotes projection arity and is not self-explanatory. Recommended name:
JoinedEntityBuilder<T1, T2>. See docs/specs/design/API-NAMING-REVIEW.md finding P0-4.
Constructors
JoinedEntityBuilder(IDataContext, JoinExpression)
Initializes a builder over the two-table projection seeded with join.
public JoinedEntityBuilder(IDataContext dataProvider, JoinExpression join)
Parameters
dataProviderIDataContextThe data context used to resolve tables and generate SQL.
joinJoinExpressionThe join expression that produced this projection.
Properties
JoinCondition
The join expression that produced this two-table projection.
public JoinExpression JoinCondition { get; set; }
Property Value
Methods
Clone()
Creates an independent copy of this builder over the same projection.
public JoinedEntityBuilder<T1, T2> Clone()
Returns
- JoinedEntityBuilder<T1, T2>
CloneImp()
Creates the copy returned by Clone() and the explicit ICloneable.Clone call.
Overridden by derived builders to clone their extra state.
protected override object CloneImp()
Returns
- object
A new builder with the same state.
CrossApply(string, Action<JoinOptions>?)
public JoinedEntityBuilder<T1, T2, TableAlias> CrossApply(string table, Action<JoinOptions>? options = null)
Parameters
tablestringoptionsAction<JoinOptions>
Returns
- JoinedEntityBuilder<T1, T2, TableAlias>
Remarks
A null, empty, or whitespace-only table is rejected at the call site with ArgumentNullException / ArgumentException (ParamName == "table"), matching the explicit ctx.From(table) form.
CrossApply<T3>(Cte<T3>)
Adds a cross apply over the typed CTE cte.
public JoinedEntityBuilder<T1, T2, T3> CrossApply<T3>(Cte<T3> cte)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
CrossApply<T3>(Cte<T3>, Action<JoinOptions>?)
Adds a cross apply over the typed CTE cte with per-join options.
public JoinedEntityBuilder<T1, T2, T3> CrossApply<T3>(Cte<T3> cte, Action<JoinOptions>? options)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
optionsAction<JoinOptions>Per-join configuration.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
CrossApply<T3>(EntityBuilder<T3>, Action<JoinOptions>?)
Adds a CROSS APPLY over T3, evaluating the joined table once per left-hand row; rows with no match are dropped.
public JoinedEntityBuilder<T1, T2, T3> CrossApply<T3>(EntityBuilder<T3> _, Action<JoinOptions>? options = null)
Parameters
_EntityBuilder<T3>The builder identifying the table to join; only its table metadata is used, not its query state.
optionsAction<JoinOptions>Optional per-join configuration; a cross join rejects every modifier at render time, while an APPLY folds a join hint into the statement-level hint comment on inline-hint dialects.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
CrossApply<T3>(Action<JoinOptions>?)
public JoinedEntityBuilder<T1, T2, T3> CrossApply<T3>(Action<JoinOptions>? options = null)
Parameters
optionsAction<JoinOptions>
Returns
- JoinedEntityBuilder<T1, T2, T3>
Type Parameters
T3
CrossApply<T3>(Expression<Func<Projection<T1, T2>, EntityBuilder<T3>>>, Action<JoinOptions>?)
Applies a correlated CROSS APPLY source per left-hand row of this 2-source join, adding it as one more flat slot.
public JoinedEntityBuilder<T1, T2, T3> CrossApply<T3>(Expression<Func<Projection<T1, T2>, EntityBuilder<T3>>> source, Action<JoinOptions>? options = null)
Parameters
sourceExpression<Func<Projection<T1, T2>, EntityBuilder<T3>>>Builds the applied source from the flattened left-hand row; it may reference every preceding slot.
optionsAction<JoinOptions>Optional per-apply configuration (strictness, global, join/table hints, source lock).
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the flat 3-slot projection; no nested projection is produced.
Type Parameters
T3The element type yielded by the applied source.
CrossApply<T3>(Expression<Func<Projection<T1, T2>, QueryCommand<T3>>>, Action<JoinOptions>?)
Applies a correlated CROSS APPLY derived query per left-hand row of this 2-source join, adding it as one more flat slot.
public JoinedEntityBuilder<T1, T2, T3> CrossApply<T3>(Expression<Func<Projection<T1, T2>, QueryCommand<T3>>> source, Action<JoinOptions>? options = null)
Parameters
sourceExpression<Func<Projection<T1, T2>, QueryCommand<T3>>>Builds the applied source from the flattened left-hand row; it may reference every preceding slot.
optionsAction<JoinOptions>Optional per-apply configuration (strictness, global, join/table hints, source lock).
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the flat 3-slot projection; no nested projection is produced.
Type Parameters
T3The element type yielded by the applied source.
CrossJoin(string, Action<JoinOptions>?)
public JoinedEntityBuilder<T1, T2, TableAlias> CrossJoin(string table, Action<JoinOptions>? options = null)
Parameters
tablestringoptionsAction<JoinOptions>
Returns
- JoinedEntityBuilder<T1, T2, TableAlias>
Remarks
A null, empty, or whitespace-only table is rejected at the call site with ArgumentNullException / ArgumentException (ParamName == "table"), matching the explicit ctx.From(table) form.
CrossJoin<T3>(Cte<T3>)
Adds a cross join over the typed CTE cte.
public JoinedEntityBuilder<T1, T2, T3> CrossJoin<T3>(Cte<T3> cte)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
CrossJoin<T3>(Cte<T3>, Action<JoinOptions>?)
Adds a cross join over the typed CTE cte with per-join options.
public JoinedEntityBuilder<T1, T2, T3> CrossJoin<T3>(Cte<T3> cte, Action<JoinOptions>? options)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
optionsAction<JoinOptions>Per-join configuration.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
CrossJoin<T3>(EntityBuilder<T3>, Action<JoinOptions>?)
Adds a CROSS JOIN over T3, producing the Cartesian product without a join condition.
public JoinedEntityBuilder<T1, T2, T3> CrossJoin<T3>(EntityBuilder<T3> _, Action<JoinOptions>? options = null)
Parameters
_EntityBuilder<T3>The builder identifying the table to join; only its table metadata is used, not its query state.
optionsAction<JoinOptions>Optional per-join configuration; a cross join rejects every modifier at render time, while an APPLY folds a join hint into the statement-level hint comment on inline-hint dialects.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
CrossJoin<T3>(Action<JoinOptions>?)
public JoinedEntityBuilder<T1, T2, T3> CrossJoin<T3>(Action<JoinOptions>? options = null)
Parameters
optionsAction<JoinOptions>
Returns
- JoinedEntityBuilder<T1, T2, T3>
Type Parameters
T3
FullJoin(string, Expression<Func<Projection<T1, T2>, TableAlias, bool>>, Action<JoinOptions>?)
public JoinedEntityBuilder<T1, T2, TableAlias> FullJoin(string table, Expression<Func<Projection<T1, T2>, TableAlias, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
tablestringjoinConditionExpression<Func<Projection<T1, T2>, TableAlias, bool>>optionsAction<JoinOptions>
Returns
- JoinedEntityBuilder<T1, T2, TableAlias>
Remarks
A null, empty, or whitespace-only table is rejected at the call site with ArgumentNullException / ArgumentException (ParamName == "table"), matching the explicit ctx.From(table) form.
FullJoin<T3>(Cte<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>)
Adds a full outer join over the typed CTE cte.
public JoinedEntityBuilder<T1, T2, T3> FullJoin<T3>(Cte<T3> cte, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
FullJoin<T3>(Cte<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds a full outer join over the typed CTE cte with per-join options.
public JoinedEntityBuilder<T1, T2, T3> FullJoin<T3>(Cte<T3> cte, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Per-join configuration.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
FullJoin<T3>(EntityBuilder<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds a FULL JOIN over T3; rows from both sides are kept, with null on the missing side.
public JoinedEntityBuilder<T1, T2, T3> FullJoin<T3>(EntityBuilder<T3> _, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
_EntityBuilder<T3>The builder identifying the table to join; only its table metadata is used, not its query state.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Optional per-join configuration, for example
j => j.Global()orj => j.WithStrictness(JoinStrictness.Any).
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
FullJoin<T3>(Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds a FULL JOIN over T3 without an explicit source; T3 is resolved through this builder's context (From<T3>()) and forwarded to the source-explicit overload.
public JoinedEntityBuilder<T1, T2, T3> FullJoin<T3>(Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Optional per-join configuration; forwarded unchanged to the source-explicit overload.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
Exceptions
- ArgumentNullException
joinConditionis null.
Join(string, Expression<Func<Projection<T1, T2>, TableAlias, bool>>, Action<JoinOptions>?)
public JoinedEntityBuilder<T1, T2, TableAlias> Join(string table, Expression<Func<Projection<T1, T2>, TableAlias, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
tablestringjoinConditionExpression<Func<Projection<T1, T2>, TableAlias, bool>>optionsAction<JoinOptions>
Returns
- JoinedEntityBuilder<T1, T2, TableAlias>
Remarks
A null, empty, or whitespace-only table is rejected at the call site with ArgumentNullException / ArgumentException (ParamName == "table"), matching the explicit ctx.From(table) form.
Join<T3>(Cte<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>)
Adds a inner join over the typed CTE cte.
public JoinedEntityBuilder<T1, T2, T3> Join<T3>(Cte<T3> cte, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
Join<T3>(Cte<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds a inner join over the typed CTE cte with per-join options.
public JoinedEntityBuilder<T1, T2, T3> Join<T3>(Cte<T3> cte, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Per-join configuration.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
Join<T3>(EntityBuilder<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds an INNER JOIN over T3; rows with no match on the right are excluded.
public JoinedEntityBuilder<T1, T2, T3> Join<T3>(EntityBuilder<T3> _, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
_EntityBuilder<T3>The builder identifying the table to join; only its table metadata is used, not its query state.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Optional per-join configuration, for example
j => j.Global()orj => j.WithStrictness(JoinStrictness.Any).
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
Join<T3>(Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds an INNER JOIN over T3 without an explicit source; T3 is resolved through this builder's context (From<T3>()) and forwarded to the source-explicit overload.
public JoinedEntityBuilder<T1, T2, T3> Join<T3>(Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Optional per-join configuration; forwarded unchanged to the source-explicit overload.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
Exceptions
- ArgumentNullException
joinConditionis null.
LeftJoin(string, Expression<Func<Projection<T1, T2>, TableAlias, bool>>, Action<JoinOptions>?)
public JoinedEntityBuilder<T1, T2, TableAlias> LeftJoin(string table, Expression<Func<Projection<T1, T2>, TableAlias, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
tablestringjoinConditionExpression<Func<Projection<T1, T2>, TableAlias, bool>>optionsAction<JoinOptions>
Returns
- JoinedEntityBuilder<T1, T2, TableAlias>
Remarks
A null, empty, or whitespace-only table is rejected at the call site with ArgumentNullException / ArgumentException (ParamName == "table"), matching the explicit ctx.From(table) form.
LeftJoin<T3>(Cte<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>)
Adds a left outer join over the typed CTE cte.
public JoinedEntityBuilder<T1, T2, T3> LeftJoin<T3>(Cte<T3> cte, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
LeftJoin<T3>(Cte<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds a left outer join over the typed CTE cte with per-join options.
public JoinedEntityBuilder<T1, T2, T3> LeftJoin<T3>(Cte<T3> cte, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Per-join configuration.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
LeftJoin<T3>(EntityBuilder<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds a LEFT JOIN over T3; unmatched left-hand rows are kept with null values on the right.
public JoinedEntityBuilder<T1, T2, T3> LeftJoin<T3>(EntityBuilder<T3> _, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
_EntityBuilder<T3>The builder identifying the table to join; only its table metadata is used, not its query state.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Optional per-join configuration, for example
j => j.Global()orj => j.WithStrictness(JoinStrictness.Any).
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
LeftJoin<T3>(Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds a LEFT JOIN over T3 without an explicit source; T3 is resolved through this builder's context (From<T3>()) and forwarded to the source-explicit overload.
public JoinedEntityBuilder<T1, T2, T3> LeftJoin<T3>(Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Optional per-join configuration; forwarded unchanged to the source-explicit overload.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
Exceptions
- ArgumentNullException
joinConditionis null.
OuterApply(string, Action<JoinOptions>?)
public JoinedEntityBuilder<T1, T2, TableAlias> OuterApply(string table, Action<JoinOptions>? options = null)
Parameters
tablestringoptionsAction<JoinOptions>
Returns
- JoinedEntityBuilder<T1, T2, TableAlias>
Remarks
A null, empty, or whitespace-only table is rejected at the call site with ArgumentNullException / ArgumentException (ParamName == "table"), matching the explicit ctx.From(table) form.
OuterApply<T3>(Cte<T3>)
Adds a outer apply over the typed CTE cte.
public JoinedEntityBuilder<T1, T2, T3> OuterApply<T3>(Cte<T3> cte)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
OuterApply<T3>(Cte<T3>, Action<JoinOptions>?)
Adds a outer apply over the typed CTE cte with per-join options.
public JoinedEntityBuilder<T1, T2, T3> OuterApply<T3>(Cte<T3> cte, Action<JoinOptions>? options)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
optionsAction<JoinOptions>Per-join configuration.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
OuterApply<T3>(EntityBuilder<T3>, Action<JoinOptions>?)
Adds an OUTER APPLY over T3, evaluating the joined table once per left-hand row; unmatched left rows are kept.
public JoinedEntityBuilder<T1, T2, T3> OuterApply<T3>(EntityBuilder<T3> _, Action<JoinOptions>? options = null)
Parameters
_EntityBuilder<T3>The builder identifying the table to join; only its table metadata is used, not its query state.
optionsAction<JoinOptions>Optional per-join configuration; a cross join rejects every modifier at render time, while an APPLY folds a join hint into the statement-level hint comment on inline-hint dialects.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
OuterApply<T3>(Action<JoinOptions>?)
public JoinedEntityBuilder<T1, T2, T3> OuterApply<T3>(Action<JoinOptions>? options = null)
Parameters
optionsAction<JoinOptions>
Returns
- JoinedEntityBuilder<T1, T2, T3>
Type Parameters
T3
OuterApply<T3>(Expression<Func<Projection<T1, T2>, EntityBuilder<T3>>>, Action<JoinOptions>?)
Applies a correlated OUTER APPLY source per left-hand row, keeping unmatched left rows of this 2-source join, adding it as one more flat slot.
public JoinedEntityBuilder<T1, T2, T3> OuterApply<T3>(Expression<Func<Projection<T1, T2>, EntityBuilder<T3>>> source, Action<JoinOptions>? options = null)
Parameters
sourceExpression<Func<Projection<T1, T2>, EntityBuilder<T3>>>Builds the applied source from the flattened left-hand row; it may reference every preceding slot.
optionsAction<JoinOptions>Optional per-apply configuration (strictness, global, join/table hints, source lock).
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the flat 3-slot projection; no nested projection is produced.
Type Parameters
T3The element type yielded by the applied source.
OuterApply<T3>(Expression<Func<Projection<T1, T2>, QueryCommand<T3>>>, Action<JoinOptions>?)
Applies a correlated OUTER APPLY derived query per left-hand row of this 2-source join, adding it as one more flat slot.
public JoinedEntityBuilder<T1, T2, T3> OuterApply<T3>(Expression<Func<Projection<T1, T2>, QueryCommand<T3>>> source, Action<JoinOptions>? options = null)
Parameters
sourceExpression<Func<Projection<T1, T2>, QueryCommand<T3>>>Builds the applied source from the flattened left-hand row; it may reference every preceding slot.
optionsAction<JoinOptions>Optional per-apply configuration (strictness, global, join/table hints, source lock).
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the flat 3-slot projection; no nested projection is produced.
Type Parameters
T3The element type yielded by the applied source.
RightJoin(string, Expression<Func<Projection<T1, T2>, TableAlias, bool>>, Action<JoinOptions>?)
public JoinedEntityBuilder<T1, T2, TableAlias> RightJoin(string table, Expression<Func<Projection<T1, T2>, TableAlias, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
tablestringjoinConditionExpression<Func<Projection<T1, T2>, TableAlias, bool>>optionsAction<JoinOptions>
Returns
- JoinedEntityBuilder<T1, T2, TableAlias>
Remarks
A null, empty, or whitespace-only table is rejected at the call site with ArgumentNullException / ArgumentException (ParamName == "table"), matching the explicit ctx.From(table) form.
RightJoin<T3>(Cte<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>)
Adds a right outer join over the typed CTE cte.
public JoinedEntityBuilder<T1, T2, T3> RightJoin<T3>(Cte<T3> cte, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
RightJoin<T3>(Cte<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds a right outer join over the typed CTE cte with per-join options.
public JoinedEntityBuilder<T1, T2, T3> RightJoin<T3>(Cte<T3> cte, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options)
Parameters
cteCte<T3>The CTE descriptor, converted with this builder's context.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Per-join configuration.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with the CTE's type.
Type Parameters
T3The CTE's projection type.
Exceptions
- ArgumentNullException
A required reference argument is null.
RightJoin<T3>(EntityBuilder<T3>, Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds a RIGHT JOIN over T3; unmatched right-hand rows are kept with null values on the left.
public JoinedEntityBuilder<T1, T2, T3> RightJoin<T3>(EntityBuilder<T3> _, Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
_EntityBuilder<T3>The builder identifying the table to join; only its table metadata is used, not its query state.
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Optional per-join configuration, for example
j => j.Global()orj => j.WithStrictness(JoinStrictness.Any).
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
RightJoin<T3>(Expression<Func<Projection<T1, T2>, T3, bool>>, Action<JoinOptions>?)
Adds a RIGHT JOIN over T3 without an explicit source; T3 is resolved through this builder's context (From<T3>()) and forwarded to the source-explicit overload.
public JoinedEntityBuilder<T1, T2, T3> RightJoin<T3>(Expression<Func<Projection<T1, T2>, T3, bool>> joinCondition, Action<JoinOptions>? options = null)
Parameters
joinConditionExpression<Func<Projection<T1, T2>, T3, bool>>A predicate relating the current projection to the joined entity.
optionsAction<JoinOptions>Optional per-join configuration; forwarded unchanged to the source-explicit overload.
Returns
- JoinedEntityBuilder<T1, T2, T3>
A builder over the projection extended with
T3.
Type Parameters
T3The entity type of the joined table.
Exceptions
- ArgumentNullException
joinConditionis null.
Where(Expression<Func<Projection<T1, T2>, bool>>)
Adds a WHERE condition while keeping the joined builder type, so the chain can end in a multi-table Delete().
public JoinedEntityBuilder<T1, T2> Where(Expression<Func<Projection<T1, T2>, bool>> condition)
Parameters
conditionExpression<Func<Projection<T1, T2>, bool>>The predicate each row must satisfy.
Returns
- JoinedEntityBuilder<T1, T2>
This builder, for chaining.