/// <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 }); }
public BindProjectStatement(BindProjectPair expressions, ExpressionVariables bindVars, ExpressionVariables projectVars) { Expressions = expressions; BindVariables = bindVars; ProjectVariables = projectVars; }