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])); }
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); }