private StringBuilder GetJoinExpression(LambdaExpressionHandler handler, Type type, string tableName) { return handler.GetExpressionAsString(false) .Replace(type.GUID.ToString(), tableName); }
private JoinHandler(SqlExpressionParser outerStatement, int indentLevel, MethodCallExpression expression) { this.outerStatement = outerStatement; this.indentLevel = indentLevel; selector = GetLambdaExpression(expression.Arguments[4]); leftStatement = new SqlExpressionParser(indentLevel + 1, outerStatement); leftStatement.Translate(GetLeftSourceExpression(expression)); rightStatement = new SqlExpressionParser(indentLevel + 1, outerStatement, AggregateType.None); rightStatement.Translate(GetRightSourceExpression(expression)); leftKeySelector = new LambdaExpressionHandler(indentLevel, (LambdaExpression)StripQuotes(expression.Arguments[2])); rightKeySelector = new LambdaExpressionHandler(indentLevel, (LambdaExpression)StripQuotes(expression.Arguments[3])); leftReturnType = leftStatement.selectHandler.ReturnType; rightReturnType = rightStatement.selectHandler.ReturnType; }
private WhereHandler(int indentLevel, MethodCallExpression expression, int parameterBaseIndex) { this.indentLevel = indentLevel; returnType = expression.Arguments[0].Type.GetGenericArguments()[0]; Expression e = StripQuotes(expression.Arguments[1]); LambdaExpression lambda = GetLambdaExpression(expression.Arguments[1]); lambdaHandler = new LambdaExpressionHandler(indentLevel, lambda, parameterBaseIndex); }
private SelectHandler(int indentLevel, MethodCallExpression expression, AggregateType aggregateType) { this.indentLevel = indentLevel; this.aggregateType = aggregateType; selector = GetLambdaExpression(expression.Arguments[1]); returnType = selector.Type.GetGenericArguments()[1]; tableType = selector.Parameters[0].Type; lambdaHandler = new LambdaExpressionHandler(indentLevel, selector); selectorExpression = lambdaHandler.GetExpressionAsString(true).ToString(); }
private OrderByHandler(int indentLevel, MethodCallExpression expression) { if (expression.Method.Name == "OrderByDescending" || expression.Method.Name == "ThenByDescending") { orderByDirection = "Desc"; } this.indentLevel = indentLevel; returnType = expression.Arguments[0].Type.GetGenericArguments()[0]; Expression e = StripQuotes(expression.Arguments[1]); lambdaHandler = new LambdaExpressionHandler(indentLevel, (LambdaExpression)StripQuotes(expression.Arguments[1])); }
private void GetNew(NewExpression newExpression) { foreach (var argument in newExpression.Arguments) { GetOperandValue(); } var args = newExpression.Arguments; var members = newExpression.Members; if (newExpression.Type != lambdaExpression.Body.Type) { var lambdaHandler = new LambdaExpressionHandler(indentLevel + 1, Expression.Lambda(newExpression, Expression.Parameter( lambdaExpression.Parameters[0].Type, "source"))); foreach (var column in lambdaHandler.aliases) { aliases[lambaExpressionId + "." + column.Key] = column.Value; aliases[column.Key] = column.Value; } } else { for (int i = 0; i < args.Count; i++) { if (args[i].NodeType != ExpressionType.MemberAccess || //hack - should check if MemberAccess has a corresponding column // in db !(args[i].Type.IsValueType || args[i].Type == typeof(string))) { continue; } string memberName = null; if (newExpression.Members[i].Name.StartsWith("get_")) { memberName = newExpression.Members[i].Name.Substring(4); } else { memberName = newExpression.Members[i].Name; } var key = lambaExpressionId + "." + memberName; aliases[key] = GetHashedName((args[i] as MemberExpression)); } } terms.Push(Expression.Constant( new BoxedConstant(newExpression.ToString()))); }