Esempio n. 1
0
        private void VisitSelect(MethodCallExpression expression)
        {
            if (expression.Arguments[0].Type.IsSubclassOf(typeof(Base))) {
                var tableName = GetTableName(((ConstantExpression)expression.Arguments[0]).Value);
                var alias = ((LambdaExpression)StripQuotes(expression.Arguments[1])).Parameters[0].Name;
                var table = new SqlTable { Alias = alias, Name = tableName };
                if (!Query.Tables.Contains(table))
                    Query.Tables.Add(table);
            } else {
                Visit(expression.Arguments[0]);
            }

            var output = ((LambdaExpression)StripQuotes(expression.Arguments[1])).Body;

            if (output.NodeType == ExpressionType.MemberAccess) {
                if (!output.Type.IsSubclassOf(typeof(Base))) {
                    AddColumnOutput((MemberExpression)output);
                } else {
                    Query.AddColumnOutput(string.Format("{0}.*", ((MemberExpression)output).Member.Name));
                }
            } else if (output.NodeType == ExpressionType.New) {
                var ne = (NewExpression)output;
                foreach (var arg in ne.Arguments) {
                    if (arg is MemberExpression) {
                        if (!arg.Type.IsSubclassOf(typeof(Base))) {
                            AddColumnOutput((MemberExpression)arg);
                        } else {
                            Query.AddColumnOutput(((MemberExpression)arg).Member.Name + ".*");
                        }
                    } else {
                        Query.AddColumnOutput(((ParameterExpression)arg).Name + ".*");
                    }
                }
            }
        }
Esempio n. 2
0
        private void VisitSelectMany(MethodCallExpression expression)
        {
            ProcessTable(expression);

            var table = new SqlTable { Alias = ((LambdaExpression)StripQuotes(expression.Arguments[2])).Parameters[1].Name, Name = GetTableName(((LambdaExpression)StripQuotes(expression.Arguments[1])).Body.Type) };
            if (!Query.Tables.Contains(table))
                Query.Tables.Add(table);
        }
Esempio n. 3
0
        private void VisitJoin(MethodCallExpression expression)
        {
            if (expression.Arguments[0] is ConstantExpression) {
                var tableName = GetTableName(expression.Arguments[0]);
                var alias = ((LambdaExpression)StripQuotes(expression.Arguments[2])).Parameters[0].Name;
                var table = new SqlTable { Alias = alias, Name = tableName };
                if (!Query.Tables.Contains(table))
                    Query.Tables.Add(table);
                Query.AddColumnOutput(alias + ".*");
            } else {
                Visit(expression.Arguments[0]);
            }

            var x1 = (LambdaExpression)StripQuotes(expression.Arguments[2]);
            var x2 = (LambdaExpression)StripQuotes(expression.Arguments[3]);
            var m1 = (MemberExpression)x1.Body;
            var m2 = (MemberExpression)x2.Body;

            SqlJoin @join = new SqlJoin { JoinAlias = ((LambdaExpression)StripQuotes(expression.Arguments[3])).Parameters[0].Name, JoinTable = GetTableName(expression.Arguments[1].Type), Left = new SqlWhereColumn { Prefix = GetParameterExpression(m1.Expression), Name = GetColumnName(m1.Member) }, Right = new SqlWhereColumn { Prefix = GetParameterExpression(m2.Expression), Name = GetColumnName(m2.Member) } };

            Query.Joins.Add(@join);
        }
Esempio n. 4
0
 private void VisitFirst(MethodCallExpression expression)
 {
     Query.Take = 1;
     if (expression.Arguments[0] is ConstantExpression && ((ConstantExpression)expression.Arguments[0]).Value.GetType().IsSubclassOf(typeof(Base))) {
         var table = new SqlTable { Name = GetTableName(expression.Arguments[0]), Alias = "t" };
         if (!Query.Tables.Contains(table))
             Query.Tables.Add(table);
     } else {
         Visit(expression.Arguments[0]);
     }
 }
Esempio n. 5
0
 private void VisitCount(MethodCallExpression methodCallExpression)
 {
     Query.AddColumnOutput("COUNT(*)");
     Query.LockColumnOutput = true;
     if (methodCallExpression.Arguments[0] is ConstantExpression) {
         var table = new SqlTable { Alias = "c", Name = GetTableName(methodCallExpression.Arguments[0]) };
         Query.Tables.Add(table);
     } else {
         Visit(methodCallExpression.Arguments[0]);
     }
 }
Esempio n. 6
0
 private void ProcessTable(MethodCallExpression expression)
 {
     if (expression.Arguments[0].Type.IsSubclassOf(typeof(Base))) {
         var tableName = GetTableName(expression.Arguments[0]);
         var alias = ((LambdaExpression)StripQuotes(expression.Arguments[1])).Parameters[0].Name;
         var table = new SqlTable { Alias = alias, Name = tableName };
         if (!Query.Tables.Contains(table))
             Query.Tables.Add(table);
     } else {
         this.Visit(expression.Arguments[0]);
     }
 }
Esempio n. 7
0
 private void ProcessTable(MethodCallExpression expression)
 {
     if (expression.Arguments[0].Type.IsSubclassOf(typeof(Base))) {
         var tableName = GetTableName(expression.Arguments[0]);
         var alias = ((LambdaExpression)StripQuotes(expression.Arguments[1])).Parameters[0].Name;
         var table = new SqlTable { Alias = alias, Name = tableName };
         if (!Query.Tables.Contains(table))
             Query.Tables.Add(table);
     } else if (IsSubclassOfRawGeneric(typeof(DbQueryable<>), expression.Arguments[0].Type)) {
         var queryable = ((ConstantExpression)expression.Arguments[0]).Value as IQueryable;
         var tableName = GetTableName(queryable.ElementType);
         var alias = ((LambdaExpression)StripQuotes(expression.Arguments[1])).Parameters[0].Name;
         var table = new SqlTable { Alias = alias, Name = tableName };
         if (!Query.Tables.Contains(table))
             Query.Tables.Add(table);
     } else {
         this.Visit(expression.Arguments[0]);
     }
 }