2016-03-23 11 views
2

を使用して複数の列に使用してテーブルに参加しましょう。しかし、私はEntityFramework/Linqでこれを再現しようとしています - すべてのサンプルを見て、結合がAND(匿名型を使用して)を使用していても、OR結合の場合と同じ結果が得られる?は、だから何私がやろうとしていることであるOR構文

+0

クロス結合を行い、on条件をwhere句に入れることができます。 DBは、結合と同じクエリ実行プランを使用できるほどスマートでなければなりません。 – juharr

+0

EFでこの動作を再現できる場合は、プロファイラを調べ、EFによって生成されたクエリを確認します。 – trailmax

答えて

3

Unionを使用where句

var results = from a in db.TableA 
       from b in db.TableB 
       where a.OriginPhonenumber == b.Id 
        || a.DestinationPhoneNumber == b.Id 
       select new { A = a, B = b }; 

それは、または結合条件には、これよりもより効率的になることは疑問だが、それはその可能性がありますどちらも同じ実行計画になります。パフォーマンスは別として、同じ結果が得られます。

1

私はちょうどクロスに参加しません

var firstJoin=from tbl in TableA 
    join c in TableB 
     on c.OriginPhoneNumber Equals tbl.Id 

var secondJoin=from tbl in TableA 
    join c in TableB 
     on c.DestinationPhoneNumber Equals tbl.Id 

var result=firstJoin.Union(secondJoin) 
関連する問題