Creating a single table join remains the same, there is no breaking change to the API. However, creating two or more table joins is now more intuitive. The return value from 'table1AndTable2 = sqlSelect.Tables.Joins.Add(table1, Type.Inner, table2)' can then be used in subsequent table join calls i.e. 'sqlSelect.Tables.Joins.Add(table1AndTable2 , Type.Inner, table3)'. This indicates that the table1AndTable2 join created in the first step is then joined to table3.
Also changed the SQLSelectTableJoinCondition to accept SQLExpression objects rather than the left and right table field names. This was required because now that the left table for a join can be either a table or a joined table the left field table alias may be unknown if it is an table join. In which case the table alias must come from an SQLFieldExpression (inherits SQLExpression) which will indicate the table alias. The way it was working where it would obtain the table name from the join was incorrect. So also closing issue #7.