public static Results Detect(Expression selector, NameGenerator nameGenerator, ISessionFactory sessionFactory) { var detector = new LeftJoinDetector(nameGenerator, sessionFactory); var newSelector = detector.VisitExpression(selector); return new Results(newSelector, detector._joins.Values, detector._expressionMap); }
public static Results Detect(Expression selector, NameGenerator nameGenerator, ISessionFactory sessionFactory) { var detector = new LeftJoinDetector(nameGenerator, sessionFactory); var newSelector = detector.VisitExpression(selector); return(new Results(newSelector, detector._joins.Values, detector._expressionMap)); }
public override void VisitSelectClause(SelectClause selectClause, QueryModel queryModel) { var joins = LeftJoinDetector.Detect(selectClause.Selector, new NameGenerator(queryModel), _sessionFactory); if (joins.Joins.Count > 0) { selectClause.Selector = joins.Selector; queryModel.TransformExpressions(e => ExpressionSwapper.Swap(e, joins.ExpressionMap)); foreach (var join in joins.Joins) { queryModel.BodyClauses.Add(join); } } }