お世話になっております。以前に質問させていただいた内容と被るのですが、解決できていない箇所があるので再度投稿させて頂きます。
SQLと同じ結果を出したいのですが、linqでleftjoinした際に違う結果になります。
いろいろと調べてlinqを書いてみたのですが、なかなかうまく行きません。
どなたかご指摘いただけますでしょうか?よろしくお願いします。

テーブル定義

TMP1
    ID         int
    START_DATE datetime
    TOUROKU_NO int
    CD         string

SQL

SELECT
BB1.*,
CASE WHEN BB2.START_DATE  is NULL THEN GETDATE() ELSE BB2.START_DATE  END AS END_DATE
FROM TMP1 AS BB1
LEFT JOIN TMP1 AS BB2 ON (BB1.ID = BB2.ID AND BB1.TOUROKU_NO = BB2.TOUROKU_NO AND BB1.START_DATE  < BB2.START_DATE 

SQL結果

ID   STARTDATE               TOROKU_NO      CD        END_DATE       

7   2010-06-30 00:00:00.000   1           03010,                          2011-07-05 00:00:00.000
7   2010-06-30 00:00:00.000    1           03010,                          2011-09-26 00:00:00.000
7   2010-06-30 00:00:00.000   1           03010,                          2011-12-06 00:00:00.000
7   2010-06-30 00:00:00.000   2           02010,                          2011-12-06 00:00:00.000
7   2010-06-30 00:00:00.000   3           10010,                          2016-11-01 14:48:08.410
7   2010-06-30 00:00:00.000   4           04441,                          2016-11-01 14:48:08.410
7   2011-07-05 00:00:00.000   1           09010,                          2011-09-26 00:00:00.000
7   2011-07-05 00:00:00.000   1           09010,                          2011-12-06 00:00:00.000
7   2011-09-26 00:00:00.000   1           10010,                          2011-12-06 00:00:00.000
7   2011-12-06 00:00:00.000   1           09010,                          2016-11-01 14:48:08.410
7   2011-12-06 00:00:00.000   2           04441,                          2016-11-01 14:48:08.410

LINQ

var result =
            from orig in TMP1
             join alias in TMP1
             on orig.ID equals alias.ID into g
             from alias in g.DefaultIfEmpty()
             where orig.TOUROKU_NO == alias.TOUROKU_NO && orig.START_DATE < alias.START_DATE 
             select new {
                 orig.ID,
                 orig.START_DATE ,
                 orig.TOUROKU_NO,
                 orig.CD,
                 END_DATE = (DBNull.Value.Equals(alias.START_DATE) ? (DateTime)orig.SERVERDATE : (DateTime)alias.START_DATE),
             };

LINQ結果

ID   STARTDATE               TOROKU_NO      CD        END_DATE       
7   2010/06/30 0:00:00      1          03010,     2011/07/05 0:00:00
7   2010/06/30 0:00:00      1          03010,     2011/09/26 0:00:00
7   2010/06/30 0:00:00      1          03010,     2011/12/06 0:00:00
7   2010/06/30 0:00:00      2          02010,     2011/12/06 0:00:00
7   2011/07/05 0:00:00      1          09010,     2011/09/26 0:00:00
7   2011/07/05 0:00:00      1          09010,     2011/12/06 0:00:00
7   2011/09/26 0:00:00      1          10010,     2011/12/06 0:00:00