static void BuildJoin( ExpressionBuilder builder, SqlQuery.FromClause.Join join, ExpressionContext outerKeyContext, Expression outerKeySelector, ExpressionContext innerKeyContext, Expression innerKeySelector, ExpressionContext countKeyContext, SqlQuery countSql) { var predicate = builder.ConvertObjectComparison( ExpressionType.Equal, outerKeyContext, outerKeySelector, innerKeyContext, innerKeySelector); if (predicate != null) join.JoinedTable.Condition.Conditions.Add(new SqlQuery.Condition(false, predicate)); else join .Expr(builder.ConvertToSql(outerKeyContext, outerKeySelector)).Equal .Expr(builder.ConvertToSql(innerKeyContext, innerKeySelector)); predicate = builder.ConvertObjectComparison( ExpressionType.Equal, outerKeyContext, outerKeySelector, countKeyContext, innerKeySelector); if (predicate != null) countSql.Where.SearchCondition.Conditions.Add(new SqlQuery.Condition(false, predicate)); else countSql.Where .Expr(builder.ConvertToSql(outerKeyContext, outerKeySelector)).Equal .Expr(builder.ConvertToSql(countKeyContext, innerKeySelector)); }