/// Visits a LINQ expression using a new expression visitor and returns a part of the PostgreSQL query it represents. private string GetNestedPsqlExpression(Expression linqExpression) { var visitor = new PsqlGeneratingExpressionVisitor(_queryModelVisitor); visitor.Visit(linqExpression); return(visitor.GetPsqlExpression()); }
public static string GetPsqlExpression(Expression linqExpression, PsqlGeneratingQueryModelVisitor queryModelVisitor, ExpressionVisitorOptions options) { var visitor = new PsqlGeneratingExpressionVisitor(queryModelVisitor, options); visitor.Visit(linqExpression); return(visitor.GetPsqlExpression()); }
public override void VisitWhereClause(WhereClause whereClause, QueryModel queryModel, int index) { var wherePredicateType = whereClause.Predicate.GetType(); if (whereClause.Predicate is SubQueryExpression subQuery) { var t = subQuery.QueryModel.BodyClauses; if (subQuery.QueryModel.SelectClause.Selector is QuerySourceReferenceExpression _sExpression) { var z = _sExpression.ReferencedQuerySource.ToString(); var z1 = z.Split(' ').LastOrDefault(); var z2 = z1?.Split(".".ToCharArray(), 2)[1]; _queryParts.AddWherePart(z2); foreach (var queryModelBodyClause in subQuery.QueryModel.BodyClauses) { if (queryModelBodyClause is WhereClause where) { var opts = new ExpressionVisitorOptions(); opts.TableName = z2; var expr = PsqlGeneratingExpressionVisitor.GetPsqlExpression(where.Predicate, this, opts); GetPsqlExpression(where.Predicate); _queryParts.AddWherePart(expr); } //var props = queryModelBodyClause.ToString().Split('.').Skip(1).ToList(); } } _queryParts.AddWherePart(GetPsqlExpression(whereClause.Predicate)); } else { _queryParts.AddWherePart(GetPsqlExpression(whereClause.Predicate)); } //_queryParts.AddWherePart(GetPsqlExpression(whereClause.Predicate)); base.VisitWhereClause(whereClause, queryModel, index); }
/// Creates an instance of the PsqlGeneratingExpressionVisitor based on this PsqlGeneratingQueryModelVisitor instance to visit the LINQ expression provided as an argument and to generate a corresponding part of the PostgreSQL query. private string GetPsqlExpression(Expression expression) { return(PsqlGeneratingExpressionVisitor.GetPsqlExpression(expression, this)); }
/// Visits the QueryModel nested in a SubQueryExpression using this PsqlGeneratingQueryModelVisitor. private void VisitSubQueryExpression(Expression expression) { PsqlGeneratingExpressionVisitor.GetPsqlExpression(expression, this); }