public Expression GetResolvedAdaptedSelector(ClauseGenerationContext clauseGenerationContext)
        {
            if (!IsLetNode)
            {
                throw new InvalidOperationException("This node is not a 'let' node.");
            }

            // Adapt the selector so that it contains a reference to the associated LetClause, i.e., instead of "x => new { x = x, y = expr }",
            // make it "x => new { x = x, y = [letClause] }"
            return(_resolvedAdaptedSelector.GetOrCreate(
                       r =>
            {
                var letClause = QuerySourceExpressionNodeUtility.GetQuerySourceForNode(this, clauseGenerationContext);

                var adaptedSelectorBody = Expression.New(
                    _letConstruction.Constructor,
                    new[] { _letConstruction.Arguments[0], new QuerySourceReferenceExpression(letClause) },
                    _letConstruction.Members);
                return r.GetResolvedExpression(adaptedSelectorBody, Selector.Parameters[0], clauseGenerationContext);
            }));
        }
 public void GetQuerySourceForNode_NoClauseRegistered()
 {
     QuerySourceExpressionNodeUtility.GetQuerySourceForNode(_node, _context);
 }
        public void GetQuerySourceForNode()
        {
            _context.AddContextInfo(_node, _querySource);

            Assert.That(QuerySourceExpressionNodeUtility.GetQuerySourceForNode(_node, _context), Is.SameAs(_querySource));
        }