質問

なぜそこにあるのかといつも疑問に思っていましたが、 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 結合では、等結合の別々の部分がコンパイラーに対して明確になるようにします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top