2010-11-17 2 views
3

En essayant d'afficher des lignes qui n'existent pas dans l'autre table en utilisant LINQ. Quelqu'un peut-il m'aider?LINQ Left Joindre sur des lignes non égales

Voici le sql en utilisant.

select * from table1 
left join table2 
on 
table1.col1 = table2.col1 
and 
table1.col2 = table2.col2 
where 
table2.col1 is null and table2.col2 is null 

Déjà recherché et trouvé une solution. Voici ce que j'ai fait jusqu'ici.

from t1 in table1 
where 
!(from t2 in table1 
    join t3 in table2 on 
    new { t2.col1, t2.col2 } 
    equals 
    new { t3.col1, t3.col2 } 
    select t2.PK).Contains(t1.PK) 
    select t1 

Le code ci-dessus fonctionne bien mais je me demande simplement si c'est la seule solution que je peux utiliser? Je veux dire, au lieu d'utiliser la méthode JOIN et CONTAINS, ne pouvons-nous pas utiliser linq de jointure gauche directement avec une clause where?

Répondre

9

Eh bien, vous pouvez faire quelque chose comme ceci:

var query = from t1 in table1 
      join t2 in table2 
      on new { t1.col1, t2.col2} equals { t2.col1, t2.col2 } 
      into groups 
      where !groups.Any() 
      select t1; 

Ici, groups est l'ensemble des lignes de t2 qui correspondent au « courant » t1 - il sera vide s'il n'y a pas un groupe, ce qui est exactement ce que vous voulez. La méthode la plus simple pour vérifier si une séquence est vide consiste à utiliser la méthode Any.

+0

Ah ... c'est probablement ce que je veux utiliser .. merci beaucoup jon .. – seigfred