/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected override ShapedQueryExpression TranslateSelect(ShapedQueryExpression source, LambdaExpression selector) { Check.NotNull(source, nameof(source)); Check.NotNull(selector, nameof(selector)); if (selector.Body == selector.Parameters[0]) { return(source); } var selectExpression = (SelectExpression)source.QueryExpression; if (selectExpression.IsDistinct) { return(null); } var newSelectorBody = ReplacingExpressionVisitor.Replace(selector.Parameters.Single(), source.ShaperExpression, selector.Body); return(source.UpdateShaperExpression(_projectionBindingExpressionVisitor.Translate(selectExpression, newSelectorBody))); }
/// <summary> /// This is an internal API that supports the Entity Framework Core infrastructure and not subject to /// the same compatibility standards as public APIs. It may be changed or removed without notice in /// any release. You should only use it directly in your code with extreme caution and knowing that /// doing so can result in application failures when updating to a new Entity Framework Core release. /// </summary> protected override ShapedQueryExpression TranslateSelect(ShapedQueryExpression source, LambdaExpression selector) { if (selector.Body == selector.Parameters[0]) { return(source); } var selectExpression = (SelectExpression)source.QueryExpression; if (selectExpression.IsDistinct) { throw new InvalidOperationException(); } var newSelectorBody = ReplacingExpressionVisitor.Replace(selector.Parameters.Single(), source.ShaperExpression, selector.Body); source.ShaperExpression = _projectionBindingExpressionVisitor .Translate(selectExpression, newSelectorBody); return(source); }