MoreLinqのDistinctByメソッドを確認することをお勧めします。ラムダ式をパラメーターとして渡すことができる場所。
あなたの例では、これは次のようになります。
var sourceId =
(from workstation in db.station
join letter in db.letter on workstation.id equals letter.Site_Id
where ThatDate < DateTime.Now.AddYears(-1)
select workstatio).DistinctBy(ws => ws.Id).ToList();
複数のプロパティでDistinctByを使用することもできます。
var sourceId =
(from workstation in db.station
join letter in db.letter on workstation.id equals letter.Site_Id
where ThatDate < DateTime.Now.AddYears(-1)
select workstatio).DistinctBy(ws => new {Id = ws.Id, OtherProperty = ws.OtherProperty}).ToList();
ところで、参照比較の代わりに、匿名タイプのインスタンスの同等性は、それぞれのプロパティを比較することによって決定されます。
私は最近、アンダース・ヘルスバーグ自身がこの問題の解決策を提案しているこのトピックに関する興味深い議論を見つけました。ここで読むことができます。