Table of Contents

Class RelationalQueryableMethodTranslatingExpressionVisitor

Namespace
Microsoft.EntityFrameworkCore.Query
Assembly
Microsoft.EntityFrameworkCore.Relational.dll
public class RelationalQueryableMethodTranslatingExpressionVisitor : QueryableMethodTranslatingExpressionVisitor
Inheritance
RelationalQueryableMethodTranslatingExpressionVisitor

Constructors

RelationalQueryableMethodTranslatingExpressionVisitor(QueryableMethodTranslatingExpressionVisitorDependencies, RelationalQueryableMethodTranslatingExpressionVisitorDependencies, QueryCompilationContext)

Creates a new instance of the Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor class.

public RelationalQueryableMethodTranslatingExpressionVisitor(QueryableMethodTranslatingExpressionVisitorDependencies dependencies, RelationalQueryableMethodTranslatingExpressionVisitorDependencies relationalDependencies, QueryCompilationContext queryCompilationContext)

Parameters

dependencies QueryableMethodTranslatingExpressionVisitorDependencies

Parameter object containing dependencies for this class.

relationalDependencies RelationalQueryableMethodTranslatingExpressionVisitorDependencies

Parameter object containing relational dependencies for this class.

queryCompilationContext QueryCompilationContext

The query compilation context object to use.

RelationalQueryableMethodTranslatingExpressionVisitor(RelationalQueryableMethodTranslatingExpressionVisitor)

Creates a new instance of the Microsoft.EntityFrameworkCore.Query.QueryableMethodTranslatingExpressionVisitor class.

protected RelationalQueryableMethodTranslatingExpressionVisitor(RelationalQueryableMethodTranslatingExpressionVisitor parentVisitor)

Parameters

parentVisitor RelationalQueryableMethodTranslatingExpressionVisitor

A parent visitor to create subquery visitor for.

Properties

RelationalDependencies

Relational provider-specific dependencies for this service.

protected virtual RelationalQueryableMethodTranslatingExpressionVisitorDependencies RelationalDependencies { get; }

Property Value

RelationalQueryableMethodTranslatingExpressionVisitorDependencies

Methods

CreateShapedQueryExpression(IEntityType)

protected override ShapedQueryExpression CreateShapedQueryExpression(IEntityType entityType)

Parameters

entityType IEntityType

Returns

ShapedQueryExpression

CreateSubqueryVisitor()

protected override QueryableMethodTranslatingExpressionVisitor CreateSubqueryVisitor()

Returns

QueryableMethodTranslatingExpressionVisitor

IsValidSelectExpressionForExecuteDelete(SelectExpression, EntityShaperExpression, out TableExpression?)

Checks weather the current select expression can be used as-is for execute a delete operation, or whether it must be pushed down into a subquery.

protected virtual bool IsValidSelectExpressionForExecuteDelete(SelectExpression selectExpression, EntityShaperExpression entityShaperExpression, out TableExpression? tableExpression)

Parameters

selectExpression SelectExpression

The select expression to validate.

entityShaperExpression EntityShaperExpression

The entity shaper expression on which the delete operation is being applied.

tableExpression TableExpression

The table expression from which rows are being deleted.

Returns

bool

Returns true if the current select expression can be used for delete as-is, false otherwise.

Remarks

By default, only single-table select expressions are supported, and optionally with a predicate.

Providers can override this to allow more select expression features to be supported without pushing down into a subquery. When doing this, VisitDelete must also be overridden in the provider's QuerySqlGenerator to add SQL generation support for the feature.

IsValidSelectExpressionForExecuteUpdate(SelectExpression, EntityShaperExpression, out TableExpression?)

Validates if the current select expression can be used for execute update operation or it requires to be joined as a subquery.

protected virtual bool IsValidSelectExpressionForExecuteUpdate(SelectExpression selectExpression, EntityShaperExpression entityShaperExpression, out TableExpression? tableExpression)

Parameters

selectExpression SelectExpression

The select expression to validate.

entityShaperExpression EntityShaperExpression

The entity shaper expression on which the update operation is being applied.

tableExpression TableExpression

The table expression from which rows are being deleted.

Returns

bool

Returns true if the current select expression can be used for update as-is, false otherwise.

Remarks

By default, only muli-table select expressions are supported, and optionally with a predicate.

Providers can override this to allow more select expression features to be supported without pushing down into a subquery. When doing this, VisitUpdate must also be overridden in the provider's QuerySqlGenerator to add SQL generation support for the feature.

TranslateAll(ShapedQueryExpression, LambdaExpression)

protected override ShapedQueryExpression? TranslateAll(ShapedQueryExpression source, LambdaExpression predicate)

Parameters

source ShapedQueryExpression
predicate LambdaExpression

Returns

ShapedQueryExpression

TranslateAny(ShapedQueryExpression, LambdaExpression?)

protected override ShapedQueryExpression? TranslateAny(ShapedQueryExpression source, LambdaExpression? predicate)

Parameters

source ShapedQueryExpression
predicate LambdaExpression

Returns

ShapedQueryExpression

TranslateAverage(ShapedQueryExpression, LambdaExpression?, Type)

protected override ShapedQueryExpression? TranslateAverage(ShapedQueryExpression source, LambdaExpression? selector, Type resultType)

Parameters

source ShapedQueryExpression
selector LambdaExpression
resultType Type

Returns

ShapedQueryExpression

TranslateCast(ShapedQueryExpression, Type)

protected override ShapedQueryExpression? TranslateCast(ShapedQueryExpression source, Type resultType)

Parameters

source ShapedQueryExpression
resultType Type

Returns

ShapedQueryExpression

TranslateConcat(ShapedQueryExpression, ShapedQueryExpression)

protected override ShapedQueryExpression? TranslateConcat(ShapedQueryExpression source1, ShapedQueryExpression source2)

Parameters

source1 ShapedQueryExpression
source2 ShapedQueryExpression

Returns

ShapedQueryExpression

TranslateContains(ShapedQueryExpression, Expression)

protected override ShapedQueryExpression? TranslateContains(ShapedQueryExpression source, Expression item)

Parameters

source ShapedQueryExpression
item Expression

Returns

ShapedQueryExpression

TranslateCount(ShapedQueryExpression, LambdaExpression?)

protected override ShapedQueryExpression? TranslateCount(ShapedQueryExpression source, LambdaExpression? predicate)

Parameters

source ShapedQueryExpression
predicate LambdaExpression

Returns

ShapedQueryExpression

TranslateDefaultIfEmpty(ShapedQueryExpression, Expression?)

protected override ShapedQueryExpression? TranslateDefaultIfEmpty(ShapedQueryExpression source, Expression? defaultValue)

Parameters

source ShapedQueryExpression
defaultValue Expression

Returns

ShapedQueryExpression

TranslateDistinct(ShapedQueryExpression)

protected override ShapedQueryExpression? TranslateDistinct(ShapedQueryExpression source)

Parameters

source ShapedQueryExpression

Returns

ShapedQueryExpression

TranslateElementAtOrDefault(ShapedQueryExpression, Expression, bool)

protected override ShapedQueryExpression? TranslateElementAtOrDefault(ShapedQueryExpression source, Expression index, bool returnDefault)

Parameters

source ShapedQueryExpression
index Expression
returnDefault bool

Returns

ShapedQueryExpression

TranslateExcept(ShapedQueryExpression, ShapedQueryExpression)

protected override ShapedQueryExpression? TranslateExcept(ShapedQueryExpression source1, ShapedQueryExpression source2)

Parameters

source1 ShapedQueryExpression
source2 ShapedQueryExpression

Returns

ShapedQueryExpression

TranslateExecuteDelete(ShapedQueryExpression)

Translates ExecuteDelete<TSource>(IQueryable<TSource>) method over the given source.

protected virtual NonQueryExpression? TranslateExecuteDelete(ShapedQueryExpression source)

Parameters

source ShapedQueryExpression

The shaped query on which the operator is applied.

Returns

NonQueryExpression

The non query after translation.

TranslateExecuteUpdate(ShapedQueryExpression, LambdaExpression)

protected virtual NonQueryExpression? TranslateExecuteUpdate(ShapedQueryExpression source, LambdaExpression setPropertyCalls)

Parameters

source ShapedQueryExpression

The shaped query on which the operator is applied.

setPropertyCalls LambdaExpression

The lambda expression containing SetProperty<TProperty>(Func<TSource, TProperty>, Func<TSource, TProperty>) statements.

Returns

NonQueryExpression

The non query after translation.

TranslateExpression(Expression)

Translates the given expression into equivalent SQL representation.

protected virtual SqlExpression? TranslateExpression(Expression expression)

Parameters

expression Expression

An expression to translate.

Returns

SqlExpression

A SqlExpression which is translation of given expression or null.

TranslateFirstOrDefault(ShapedQueryExpression, LambdaExpression?, Type, bool)

protected override ShapedQueryExpression? TranslateFirstOrDefault(ShapedQueryExpression source, LambdaExpression? predicate, Type returnType, bool returnDefault)

Parameters

source ShapedQueryExpression
predicate LambdaExpression
returnType Type
returnDefault bool

Returns

ShapedQueryExpression

TranslateGroupBy(ShapedQueryExpression, LambdaExpression, LambdaExpression?, LambdaExpression?)

protected override ShapedQueryExpression? TranslateGroupBy(ShapedQueryExpression source, LambdaExpression keySelector, LambdaExpression? elementSelector, LambdaExpression? resultSelector)

Parameters

source ShapedQueryExpression
keySelector LambdaExpression
elementSelector LambdaExpression
resultSelector LambdaExpression

Returns

ShapedQueryExpression

TranslateGroupJoin(ShapedQueryExpression, ShapedQueryExpression, LambdaExpression, LambdaExpression, LambdaExpression)

protected override ShapedQueryExpression? TranslateGroupJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector)

Parameters

outer ShapedQueryExpression
inner ShapedQueryExpression
outerKeySelector LambdaExpression
innerKeySelector LambdaExpression
resultSelector LambdaExpression

Returns

ShapedQueryExpression

TranslateIntersect(ShapedQueryExpression, ShapedQueryExpression)

protected override ShapedQueryExpression? TranslateIntersect(ShapedQueryExpression source1, ShapedQueryExpression source2)

Parameters

source1 ShapedQueryExpression
source2 ShapedQueryExpression

Returns

ShapedQueryExpression

TranslateJoin(ShapedQueryExpression, ShapedQueryExpression, LambdaExpression, LambdaExpression, LambdaExpression)

protected override ShapedQueryExpression? TranslateJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector)

Parameters

outer ShapedQueryExpression
inner ShapedQueryExpression
outerKeySelector LambdaExpression
innerKeySelector LambdaExpression
resultSelector LambdaExpression

Returns

ShapedQueryExpression

TranslateLambdaExpression(ShapedQueryExpression, LambdaExpression)

Translates the given lambda expression for the Microsoft.EntityFrameworkCore.Query.ShapedQueryExpression source into equivalent SQL representation.

protected virtual SqlExpression? TranslateLambdaExpression(ShapedQueryExpression shapedQueryExpression, LambdaExpression lambdaExpression)

Parameters

shapedQueryExpression ShapedQueryExpression

A Microsoft.EntityFrameworkCore.Query.ShapedQueryExpression on which the lambda expression is being applied.

lambdaExpression LambdaExpression

A LambdaExpression to translate into SQL.

Returns

SqlExpression

A SqlExpression which is translation of given lambda expression or null.

TranslateLastOrDefault(ShapedQueryExpression, LambdaExpression?, Type, bool)

protected override ShapedQueryExpression? TranslateLastOrDefault(ShapedQueryExpression source, LambdaExpression? predicate, Type returnType, bool returnDefault)

Parameters

source ShapedQueryExpression
predicate LambdaExpression
returnType Type
returnDefault bool

Returns

ShapedQueryExpression

TranslateLeftJoin(ShapedQueryExpression, ShapedQueryExpression, LambdaExpression, LambdaExpression, LambdaExpression)

protected override ShapedQueryExpression? TranslateLeftJoin(ShapedQueryExpression outer, ShapedQueryExpression inner, LambdaExpression outerKeySelector, LambdaExpression innerKeySelector, LambdaExpression resultSelector)

Parameters

outer ShapedQueryExpression
inner ShapedQueryExpression
outerKeySelector LambdaExpression
innerKeySelector LambdaExpression
resultSelector LambdaExpression

Returns

ShapedQueryExpression

TranslateLongCount(ShapedQueryExpression, LambdaExpression?)

protected override ShapedQueryExpression? TranslateLongCount(ShapedQueryExpression source, LambdaExpression? predicate)

Parameters

source ShapedQueryExpression
predicate LambdaExpression

Returns

ShapedQueryExpression

TranslateMax(ShapedQueryExpression, LambdaExpression?, Type)

protected override ShapedQueryExpression? TranslateMax(ShapedQueryExpression source, LambdaExpression? selector, Type resultType)

Parameters

source ShapedQueryExpression
selector LambdaExpression
resultType Type

Returns

ShapedQueryExpression

TranslateMin(ShapedQueryExpression, LambdaExpression?, Type)

protected override ShapedQueryExpression? TranslateMin(ShapedQueryExpression source, LambdaExpression? selector, Type resultType)

Parameters

source ShapedQueryExpression
selector LambdaExpression
resultType Type

Returns

ShapedQueryExpression

TranslateOfType(ShapedQueryExpression, Type)

protected override ShapedQueryExpression? TranslateOfType(ShapedQueryExpression source, Type resultType)

Parameters

source ShapedQueryExpression
resultType Type

Returns

ShapedQueryExpression

TranslateOrderBy(ShapedQueryExpression, LambdaExpression, bool)

protected override ShapedQueryExpression? TranslateOrderBy(ShapedQueryExpression source, LambdaExpression keySelector, bool ascending)

Parameters

source ShapedQueryExpression
keySelector LambdaExpression
ascending bool

Returns

ShapedQueryExpression

TranslateReverse(ShapedQueryExpression)

protected override ShapedQueryExpression? TranslateReverse(ShapedQueryExpression source)

Parameters

source ShapedQueryExpression

Returns

ShapedQueryExpression

TranslateSelect(ShapedQueryExpression, LambdaExpression)

protected override ShapedQueryExpression TranslateSelect(ShapedQueryExpression source, LambdaExpression selector)

Parameters

source ShapedQueryExpression
selector LambdaExpression

Returns

ShapedQueryExpression

TranslateSelectMany(ShapedQueryExpression, LambdaExpression)

protected override ShapedQueryExpression? TranslateSelectMany(ShapedQueryExpression source, LambdaExpression selector)

Parameters

source ShapedQueryExpression
selector LambdaExpression

Returns

ShapedQueryExpression

TranslateSelectMany(ShapedQueryExpression, LambdaExpression, LambdaExpression)

protected override ShapedQueryExpression? TranslateSelectMany(ShapedQueryExpression source, LambdaExpression collectionSelector, LambdaExpression resultSelector)

Parameters

source ShapedQueryExpression
collectionSelector LambdaExpression
resultSelector LambdaExpression

Returns

ShapedQueryExpression

TranslateSingleOrDefault(ShapedQueryExpression, LambdaExpression?, Type, bool)

protected override ShapedQueryExpression? TranslateSingleOrDefault(ShapedQueryExpression source, LambdaExpression? predicate, Type returnType, bool returnDefault)

Parameters

source ShapedQueryExpression
predicate LambdaExpression
returnType Type
returnDefault bool

Returns

ShapedQueryExpression

TranslateSkip(ShapedQueryExpression, Expression)

protected override ShapedQueryExpression? TranslateSkip(ShapedQueryExpression source, Expression count)

Parameters

source ShapedQueryExpression
count Expression

Returns

ShapedQueryExpression

TranslateSkipWhile(ShapedQueryExpression, LambdaExpression)

protected override ShapedQueryExpression? TranslateSkipWhile(ShapedQueryExpression source, LambdaExpression predicate)

Parameters

source ShapedQueryExpression
predicate LambdaExpression

Returns

ShapedQueryExpression

TranslateSum(ShapedQueryExpression, LambdaExpression?, Type)

protected override ShapedQueryExpression? TranslateSum(ShapedQueryExpression source, LambdaExpression? selector, Type resultType)

Parameters

source ShapedQueryExpression
selector LambdaExpression
resultType Type

Returns

ShapedQueryExpression

TranslateTake(ShapedQueryExpression, Expression)

protected override ShapedQueryExpression? TranslateTake(ShapedQueryExpression source, Expression count)

Parameters

source ShapedQueryExpression
count Expression

Returns

ShapedQueryExpression

TranslateTakeWhile(ShapedQueryExpression, LambdaExpression)

protected override ShapedQueryExpression? TranslateTakeWhile(ShapedQueryExpression source, LambdaExpression predicate)

Parameters

source ShapedQueryExpression
predicate LambdaExpression

Returns

ShapedQueryExpression

TranslateThenBy(ShapedQueryExpression, LambdaExpression, bool)

protected override ShapedQueryExpression? TranslateThenBy(ShapedQueryExpression source, LambdaExpression keySelector, bool ascending)

Parameters

source ShapedQueryExpression
keySelector LambdaExpression
ascending bool

Returns

ShapedQueryExpression

TranslateUnion(ShapedQueryExpression, ShapedQueryExpression)

protected override ShapedQueryExpression? TranslateUnion(ShapedQueryExpression source1, ShapedQueryExpression source2)

Parameters

source1 ShapedQueryExpression
source2 ShapedQueryExpression

Returns

ShapedQueryExpression

TranslateWhere(ShapedQueryExpression, LambdaExpression)

protected override ShapedQueryExpression? TranslateWhere(ShapedQueryExpression source, LambdaExpression predicate)

Parameters

source ShapedQueryExpression
predicate LambdaExpression

Returns

ShapedQueryExpression

VisitExtension(Expression)

protected override Expression VisitExtension(Expression extensionExpression)

Parameters

extensionExpression Expression

Returns

Expression

VisitMethodCall(MethodCallExpression)

protected override Expression VisitMethodCall(MethodCallExpression methodCallExpression)

Parameters

methodCallExpression MethodCallExpression

Returns

Expression