リンク:結合における == と等しいの違いは何ですか?
質問
なぜそこにあるのかといつも疑問に思っていましたが、 equals
== 演算子を使用するのではなく、linq のキーワードを結合します。
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();
[編集] 質問を言い換え、例を修正しました。
解決
Matt Warren による素晴らしい説明があります。 蛾:
「C# に「==」演算子の代わりに「equals」という単語がある理由は、「on」句では単一の述語式ではなく、等価性を比較する 2 つの別々の式を指定する必要があることを明確にするためです。from-join パターンは、比較できる値を計算するために使用される 2 つの別個のデリゲートを指定する Enumerable.Join() 標準クエリ演算子にマップされます。一方でルックアップ テーブルを構築し、もう一方でルックアップ テーブルを調査するには、これらを別個のデリゲートとして必要とします。SQL のような完全なクエリ プロセッサは、単一の述語式を自由に調べて、それを処理する方法を選択できます。ただし、LINQ を SQL と同様に動作させるには、結合条件を常に式ツリーとして指定する必要があり、単純なメモリ内オブジェクトの場合には大きなオーバーヘッドになります。」
ただし、これに関係するのは、 join
. 。よくわからない equals
コード例で使用する必要があります (コンパイルできますか?)。
他のヒント
最初のバージョンはコンパイルできません。あなた のみ 使用 equals
結合では、等結合の別々の部分がコンパイラーに対して明確になるようにします。
所属していません StackOverflow