/// <summary>
        /// Gets the variables in a (bind, project) pair.
        /// </summary>
        private static QueryStatement GetVariables(BindProjectPair pair)
        {
            var project = pair.Project;
            var isLet   = project.Parameters.Any(param => param.Name.StartsWith(LET_PREFIX));

            if (isLet)
            {
                var letParam      = project.Parameters.ElementAt(1);
                var letName       = letParam.Name;
                var originalName  = Regex.Split(letName, LET_PREFIX)[1];
                var letExpression = Expression.Lambda(project.Body, project.Parameters.First(),
                                                      Expression.Parameter(letParam.Type, originalName));
                var letVariables = ParseExpression.GetExpressionVariables(letExpression);
                return(new LetStatement(originalName, letExpression, letVariables));
            }
            var bindVars    = ParseExpression.GetExpressionVariables(pair.Bind);
            var projectVars = ParseExpression.GetExpressionVariables(project);

            return(new BindProjectStatement(pair, bindVars, projectVars)
            {
                IsSelect = pair.IsSelect
            });
        }
Example #2
0
 public BindProjectStatement(BindProjectPair expressions, ExpressionVariables bindVars, ExpressionVariables projectVars)
 {
     Expressions      = expressions;
     BindVariables    = bindVars;
     ProjectVariables = projectVars;
 }