/// Adds a WHERE part of the SQL query. /// /// If a subquery parts aggregator is open, redirects the call to it instead. public void AddWherePart(string formatString, params object[] args) { if (_visitingSubQueryExpression) { _subQueryExpressionPartsAggregator.AddWherePart(formatString, args); } else { if (formatString != string.Empty) { WhereParts.Add(string.Format(formatString, args)); } } }
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); }