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)); }