2011-12-14 13 views
4

ラムダ式を使用したL2Eの次のT-SQLクエリに相当するものは何でしょうか?複数のフィールドでのLINQ結合

Select * from a INNER JOIN b on a.Foo = b.Foo OR a.Foo = b.Bar 

私はaとb等しいa.Foo

b.FooにOR b.Barおかげで参加したいです。

+1

これは、[エンティティへのLINQで 'Join'を使用するには、通常、間違い](http://blogs.teamb.com/craigstuntz/2010/01/13/です38525 /)。しかし、実際の問題を説明するのではなく、作り上げた「Foo」と「Bar」について質問しているので、それを手助けするのは難しいです。 –

+0

@CraigStuntz:FooとBarは私の質問では価値がないので使用しました。 FYI、 '(a.ID = b.a_IDまたはa.ID = b.ID)'これは実際のFooとBarです。 – Kamyar

+0

これらのIDに関連したナビゲーションは何ですか?あなたがいずれかを持っている? –

答えて

7

実際の結合句を使用してLINQで "または"スタイル結合を行うことはできません。 LINQのすべての結合句は等号です。あなたが来ることができる最も近いWHERE句れる:

var query = from a in A 
      from b in B 
      where a.Foo == b.Foo || a.Foo == b.Bar 
      select new { a, b }; 
+0

あなたは* equijoin *を意味しますか? Equijoinは等価比較のみを使用する結合ステートメントですが、**結合述部は複数の条件を含むことができます**。私が間違っている? –

+2

@MarekGrzenkowicz:残念ながら、この(ウィキペディア:)の私の通常のリファレンスソースは十分な詳細を与えていません。しかし、論理的には、 "AND"のequijoinは、複数列のキー(LINQでモデル化する方法)で単一の等価比較を持つequijoinと見ることができます。 "OR" s *との結合はそのように見ることはできません。 –

関連する問題