2009-05-18 5 views
0

TableBに関連要素を持たない要素をTableAから取得する場合に、これらのいずれかを使用することに利点はありますか?GroupJoinとnull関連項目を除外する場所

TableA 
    .GroupJoin(
     TableB, 
     o => o.TableAID, 
     i => i.TableAID, 
     (o,i) => new {o, child = i.DefaultIfEmpty()}) 
    .Where(x => x.child.Where(c => c != null).Count() == 0) 
    .Select(x => x.o); 

または

TableA 
    .Where(a => !TableB.Select(b => b.TableAID).Contains(a.TableAID)); 

私は左の外側でこれをやってに慣れてはSQL、用途の最初の例のようなものに参加します。 2番目の例では、 "NOT IN"型のアプローチを使用していますが、これはこれまで私が使ったことではありません。

両方の方法で同じデータが返されます。第2のものは、シンプルさの観点から私の好みのものです。最初のものには利点がありますか?

これを行う別の方法がありますか?

答えて

0

SQL Serverのクエリオプティマイザは、WHERE INと同様にLEFT JOIN WHERE b is NULLと同じことを行います。推定実行計画を確認して確認します。

関連する問題