テーブルAとBがあり、AとBは1対Nになっているとする。
AとBを結合し、Aの項目a_groupごとにグループ化して、Bの項目b_dateのもっとも古いものだけを取り出したいとする。

SQL Server で普通にやる場合、row_number を使った以下のような SQL を思いつく。
select * from (
    select
        row_number() over (partition by A.a_group order by B.b_date, B.b_id) as rn,
        B.*
    from A 
    inner join B
        on A.a_id = B.a_id
) t
where rn = 1

これを LINQ to SQL で書けば以下のようになる。
var query = from dr in db.B
            join cr in db.A
                on B.a_id equals A.a_id
            group dr by new { aGroup = cr.a_group } into gdr
            select gdr.OrderBy(x => x.b_date).ThenBy(x => x.b_id).First();

そして、実際に LINQ to SQL が実行する SQL を見てみると、row_number は使わず outer apply を使っていた。
以下のような SQL になると思うが、たしかに最初の SQL とこちらの SQL は同じ結果となる。なるほど。
ただし、select される項目は違う。
outer apply は outer apply 句の前の select 項目の後ろに、outer apply 句の後の select 項目がくっつく。
select * from (
    select A.a_group
    from A 
    inner join B
        on A.a_id = B.a_id
    group by A.a_group
) t
outer apply (
    select top 1 B.*
    from A 
    inner join B
        on A.a_id = B.a_id
    where t.a_group = A.a_group
    order by B.b_date, B.b_id
) u

以上です。