コード例 #1
0
        public static void LoadWhereHandler([NotNull] Type type, [NotNull] WhereHandlerAttribute whereHandlerAttribute)
        {
            Assert.ArgumentNotNull(type, nameof(type));
            Assert.ArgumentNotNull(whereHandlerAttribute, nameof(whereHandlerAttribute));

            var where = new WhereHandler
            {
                Type      = type,
                Attribute = whereHandlerAttribute
            };

            whereHandlers.Add(where);
        }
コード例 #2
0
ファイル: SQLExpressionParser.cs プロジェクト: lfont/PetaPoco
        protected override Expression VisitMethodCall(MethodCallExpression m)
        {
            if (m.Method.DeclaringType == typeof(Queryable))
            {

                switch (m.Method.Name)
                {
                    case "Select":
                        Debug.Assert(selectHandler == null);
                        selectHandler =
                            SelectHandler.GetSelectHandler(indentLevel + 1, m, aggregateType);
                        if (selectHandler == null)
                        {
                            this.queryableMethods.Enqueue(m);
                        }
                        this.Visit(m.Arguments[0]);
                        break;
                    case "Join":
                        Debug.Assert(joinHandler == null);
                        Debug.Assert(crossJoinHandler == null);
                        joinHandler = JoinHandler.GetJoinHandler(this, indentLevel + 1, m);
                        break;
                    case "SelectMany":
                        Debug.Assert(crossJoinHandler == null);
                        Debug.Assert(joinHandler == null);
                        crossJoinHandler = CrossJoinHandler.GetCrossJoinHandler(this, indentLevel + 1, m);
                        break;
                    case "Where":
                        Debug.Assert(whereHandler == null);
                        int parameterBaseIndex = outerStatement == null ? 0 : outerStatement.ParameterCount;
                        whereHandler =
                            WhereHandler.GetWhereHandler(indentLevel + 1, m, parameterBaseIndex);
                        if (whereHandler == null)
                        {
                            this.queryableMethods.Enqueue(m);
                        }
                        this.Visit(m.Arguments[0]);
                        break;
                    case "OrderBy":
                    case "OrderByDescending":
                    case "ThenBy":
                    case "ThenByDescending":
                        var orderByHandler = OrderByHandler.GetOrderByHandler(indentLevel + 1, m);
                        if (orderByHandler == null)
                        {
                            this.queryableMethods.Enqueue(m);
                        }
                        else
                        {
                            orderByHandlers.Push(orderByHandler);
                        }
                        this.Visit(m.Arguments[0]);
                        break;
                    default:
                        queryableMethods.Enqueue(m);
                        this.Visit(m.Arguments[0]);
                        break;
                }
            }
            else
            {

                throw new NotSupportedException(string.Format("The method '{0}' is not supported", m.Method.Name));
            }

            return m;
        }