[C#]LINQ to SQL-メソッド構文について

LINQ to SQLに触れる機会があったので、調べたことを残しておきます。

INNER JOIN

var q = db.Table1.Join(
    db.Table2,
    t1 => t1.key,
    t2 => t2.key,
    (t1,t2) => {
        t1.id,
        t2.id
    });

LEFT JOIN

var q = db.Table1.GroupJoin(
    db.Table2,
    t1 => t1.key,
    t2 => t2.key,
    (t1,t2) => {
        t1,
        t2
    }).SelectMany(
        x => x.t2.DefaultIfEmpty(),
        (t1,t2) => {
            t1.t1.id,
            t2.id.
        }
    );

複数のキーで結合する方法

// 複数のキーで結合する場合
var q = db.Table1.Join(
    db.Table2,
    t1 => new { t1.key1 , t1.key2 },
    t2 => new { t2.key1 , t2.key2 },
    (t1,t2) => {
        t1.id,
        t2.id
    });

キーの列名が違う場合は、列名と順序を揃えないといけないようです。

// 複数のキーで結合する場合(列名が違う場合)
var q = db.Table1.Join(
    db.Table2,
    t1 => new { key1 = t1.keyA , key2 = t1.keyB },
    t2 => new { key1 = t2.keyC , key2 = t2.keyD },
    (t1,t2) => {
        t1.id,
        t2.id
    });

注意点

なぜかは知りませんが、OrderBy()の後にDistinct()を使用すると、ORDER BYが効かなくなるみたいです。

Distinct()の後にOrderBy()を使用すれば、DISTINCTもORDER BY も効きました。