==演算子を使用するのではなく、linq結合にequals
キーワードがあるのはなぜかといつも疑問に思いました。
Property deadline =
(from p in properties
join w in widgets
on p.WidgetID equals w.ID
select p).First();
の代わりに
Property deadline =
(from p in properties
join w in widgets
on p.WidgetID == w.ID
select p).First();
[EDIT]質問を言い換え、例を修正しました。
The Moth にMatt Warrenによる素晴らしい説明があります。
「C#に「==」演算子の代わりに「等しい」という単語がある理由は、「on」句が、単一の述語式ではなく、等しいかどうか比較される2つの別々の式を提供する必要があることを明確にするためでした。結合パターンは、比較可能な値を計算するために使用される2つの個別のデリゲートを指定するEnumerable.Join()標準クエリ演算子にマップされます。1つでルックアップテーブルを作成し、ルックアップにプローブするには、それらを個別のデリゲートとして必要とします。 SQLのような完全なクエリプロセッサは、単一の述語式を自由に調べて、その処理方法を選択できます。ただし、LINQをSQLと同様に動作させるには、結合条件を常に式として指定する必要があります。ツリー、単純なメモリ内オブジェクトの場合の重要なオーバーヘッド。」
ただし、これはjoin
に関係します。コード例でequals
を使用する必要があるかどうかはわかりません(コンパイルも可能ですか?)。
最初のバージョンはコンパイルされません。 only結合でequals
を使用して、等結合の別々の半分をコンパイラに明確にします。