2009-05-18 6 views
0

Y a-t-il un avantage à utiliser l'un de ces éléments pour récupérer des éléments de la TableA qui n'ont pas d'élément associé dans la TableB?GroupJoin vs. Où filtrer les éléments liés à 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); 

ou

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

Je suis habitué à le faire avec une jointure externe gauche dans SQL, que le premier exemple type d'utilisations. Le second exemple utilise une approche de type "NOT IN", ce que je n'ai jamais utilisé auparavant.

Les deux méthodes renvoient les mêmes données. Le second serait mon préféré de la vue de la simplicité. Est-ce que le premier a des avantages?

Avez-vous une autre façon de procéder?

Répondre

0

L'optimiseur de requête de SQL Server fera la même chose avec un LEFT JOIN WHERE b is NULL qu'avec un WHERE IN ... Confirmez cela en examinant le plan d'exécution estimé.

Questions connexes