private static Expression <Func <T, object> > ParseSelect <T>(string selectExpression)
        {
            var selectMethods = SyntaxTreeParser.Parse(selectExpression);

            Assert.IsNotNull(selectMethods);
            Assert.AreEqual(1, selectMethods.Count);
            Assert.IsInstanceOf <InvocationQuerySyntaxNode>(selectMethods[0]);

            return((Expression <Func <T, object> >)ExpressionSelectQuerySyntaxVisitor.CreateSelectExpression(typeof(T), (InvocationQuerySyntaxNode)selectMethods[0]));
        }
        private static Func <IDocumentFilterBuilder, object> ParseFilter(string filter)
        {
            var filterMethods = SyntaxTreeParser.Parse(filter);

            Assert.IsNotNull(filterMethods);
            Assert.AreEqual(1, filterMethods.Count);
            Assert.IsInstanceOf <InvocationQuerySyntaxNode>(filterMethods[0]);

            return(FuncFilterQuerySyntaxVisitor.CreateFilterExpression((InvocationQuerySyntaxNode)filterMethods[0]));
        }
Ejemplo n.º 3
0
        private static Action <IDocumentProjectionBuilder> ParseSelect(string selectExpression)
        {
            var selectMethods = SyntaxTreeParser.Parse(selectExpression);

            Assert.IsNotNull(selectMethods);
            Assert.AreEqual(1, selectMethods.Count);
            Assert.IsInstanceOf <InvocationQuerySyntaxNode>(selectMethods[0]);

            return(FuncSelectQuerySyntaxVisitor.CreateSelectExpression((InvocationQuerySyntaxNode)selectMethods[0]));
        }
        private static IDictionary <string, DocumentSortOrder> ParseOrder(string orderExpression)
        {
            var orderMethods = SyntaxTreeParser.Parse(orderExpression);

            Assert.IsNotNull(orderMethods);
            Assert.AreEqual(1, orderMethods.Count);
            Assert.IsInstanceOf <InvocationQuerySyntaxNode>(orderMethods[0]);

            return(FuncOrderQuerySyntaxVisitor.CreateOrderExpression((InvocationQuerySyntaxNode)orderMethods[0]).ToDictionary(i => i.Key, i => i.Value));
        }
        private static Expression <Func <T, bool> > ParseFilter <T>(string filter)
        {
            var filterMethods = SyntaxTreeParser.Parse(filter);

            Assert.IsNotNull(filterMethods);
            Assert.AreEqual(1, filterMethods.Count);
            Assert.IsInstanceOf <InvocationQuerySyntaxNode>(filterMethods[0]);

            return((Expression <Func <T, bool> >)ExpressionFilterQuerySyntaxVisitor.CreateFilterExpression(typeof(T), (InvocationQuerySyntaxNode)filterMethods[0]));
        }
        /// <summary>
        /// Возвращает функцию фильтрации документов.
        /// </summary>
        protected InvocationQuerySyntaxNode ParseFilter(IHttpRequest request, string documentIdKey)
        {
            InvocationQuerySyntaxNode filter = null;

            // Если определен фильтр по идентификатору документа
            var documentId = GetRequestParameter(request, documentIdKey);

            if (!string.IsNullOrEmpty(documentId))
            {
                filter = new InvocationQuerySyntaxNode(QuerySyntaxHelper.EqMethodName);
                filter.Arguments.Add(new IdentifierNameQuerySyntaxNode("_id"));
                filter.Arguments.Add(new LiteralQuerySyntaxNode(documentId));
            }
            // Если определено условие фильтрации
            else
            {
                var documentQuery = GetQueryParameter(request, QuerySyntaxHelper.FilterParameterName);

                if (documentQuery != null)
                {
                    var syntaxNodes = _syntaxTreeParser.Parse(documentQuery);

                    if (syntaxNodes != null && syntaxNodes.Count > 0)
                    {
                        if (syntaxNodes.Count == 1)
                        {
                            return(syntaxNodes[0] as InvocationQuerySyntaxNode);
                        }

                        // По умолчанию все условия объединяются методом and()
                        var and = new InvocationQuerySyntaxNode(QuerySyntaxHelper.AndMethodName);
                        and.Arguments.AddRange(syntaxNodes);
                        return(and);
                    }
                }
            }

            return(filter);
        }