- this.variable = variable;
- }
-
- protected virtual void AddSelectorArguments (EmitContext ec, ArrayList args, Parameter parentParameter,
- ref Parameter parameter, TransparentIdentifiersScope ti)
- {
- args.Add (CreateSelectorArgument (ec, expr, parentParameter, ti));
- args.Add (CreateSelectorArgument (ec, element_selector,
- new Parameter [] { parentParameter, parameter }, ti));
- }
-
- //
- // Customization for range variables which not only creates a lambda expression but
- // also builds a chain of range varible pairs
- //
- public override Expression BuildQueryClause (EmitContext ec, Expression lSide, Parameter parentParameter, TransparentIdentifiersScope ti)
- {
- Parameter parameter = CreateBlockParameter (variable);
-
- if (next != null) {
- //
- // Builds transparent identifiers, each identifier includes its parent
- // type at index 0, and new value at index 1. This is not valid for the
- // first one which includes two values directly.
- //
- ArrayList transp_args = new ArrayList (2);
- transp_args.Add (new AnonymousTypeParameter (parentParameter));
- transp_args.Add (CreateAnonymousTypeVariable (parameter));
- element_selector = new AnonymousTypeDeclaration (transp_args, (TypeContainer) ec.TypeContainer, loc);