/// <inheritdoc /> public override void VisitSelectClause( SelectClause selectClause, QueryModel queryModel) { Check.NotNull(selectClause, nameof(selectClause)); Check.NotNull(queryModel, nameof(queryModel)); if (selectClause.Selector.Type == Expression.Type.GetSequenceType() && selectClause.Selector is QuerySourceReferenceExpression) { return; } Expression selector = ReplaceClauseReferences( _projectionExpressionVisitorFactory .Create(this, queryModel.MainFromClause) .Visit(selectClause.Selector), inProjection: true); if ((Expression.Type.TryGetSequenceType() != null || !(selectClause.Selector is QuerySourceReferenceExpression)) && !queryModel.ResultOperators .Select(ro => ro.GetType()) .Any( t => t == typeof(GroupResultOperator) || t == typeof(AllResultOperator))) { Expression = Expression.Call( LinqOperatorProvider.Select .MakeGenericMethod(CurrentParameter.Type, selector.Type), Expression, Expression.Lambda(ConvertToRelationshipAssignments(selector), CurrentParameter)); } }
public override void VisitSelectClause( [NotNull] SelectClause selectClause, [NotNull] QueryModel queryModel) { Check.NotNull(selectClause, nameof(selectClause)); Check.NotNull(queryModel, nameof(queryModel)); var sequenceType = _expression.Type.GetSequenceType(); if (selectClause.Selector.Type == sequenceType) { return; } var selector = ReplaceClauseReferences( _projectionExpressionVisitorFactory .Create(this, queryModel.MainFromClause) .Visit(selectClause.Selector), inProjection: true); if (selector.Type != sequenceType) { _expression = Expression.Call( LinqOperatorProvider.Select .MakeGenericMethod(CurrentParameter.Type, selector.Type), _expression, Expression.Lambda(selector, CurrentParameter)); } }