示例#1
0
 private StringBuilder GetJoinExpression(LambdaExpressionHandler handler,
                                         Type type,
                                         string tableName)
 {
     return handler.GetExpressionAsString(false)
                   .Replace(type.GUID.ToString(), tableName);
 }
示例#2
0
            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;
            }
示例#3
0
            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);
            }
示例#4
0
            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();
            }
示例#5
0
            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]));
            }
示例#6
0
            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())));
            }