public void Join6() { using (var db = new TestDbManager()) { var q = from g in db.GrandChild join p in db.Parent4 on g.Child.ParentID equals p.ParentID select g; var ctx = q.GetContext(); ctx.BuildExpression(null, 0); var sql = db.GetSqlText(ctx.SqlQuery); CompareSql(sql, @" SELECT [g].[ParentID], [g].[ChildID], [g].[GrandChildID] FROM [GrandChild] [g] LEFT JOIN [Child] [t1] ON [g].[ParentID] = [t1].[ParentID] AND [g].[ChildID] = [t1].[ChildID] INNER JOIN [Parent] [p] ON [t1].[ParentID] = [p].[ParentID]" ); } }