Comment faire une jointure externe complète dans Linq?

J'ai hérité d'une base de données qui n'a pas été conçu exactement de manière optimale, et j'ai besoin de manipuler des données. Permettez-moi de donner un plus commun analogie avec le genre de chose que j'ai à faire:

Disons que nous avons un Student table, un StudentClass table de garder trace de toutes les classes, il a assisté, et une StudentTeacher table qui stocke tous les professeurs qui ont enseigné cette élève. Oui, je sais que c'est stupide de conception, et il serait plus logique de les stocker à l'enseignant de la Classe de la table, mais c'est ce à quoi nous travaillons avec.

Je veux maintenant nettoyer les données, et je veux trouver tous les endroits où un élève a un professeur, mais pas de classes, ou une classe, mais pas d'enseignants. SQL ainsi:

select *
from StudentClass sc
full outer join StudentTeacher st on st.StudentID = sc.StudentID
where st.id is null or sc.id is null

Comment faites-vous cela dans Linq?

  • Remarque: ce n'est pas vraiment une jointure externe complète - puisque vous voulez exclure les lignes où la jointure interne réussi. Je suis juste de mentionner puisque c'est un premier résultat de recherche pour 'full outer join linq' - donc, si c'est ce que quelqu'un est à la recherche pour les réponses peuvent ne pas être de droite
  • il pourrait être une solution de haute performance, reportez-vous ci-dessous à la question. stackoverflow.com/questions/5489987/linq-full-outer-join/...
InformationsquelleAutor Shaul Behr | 2010-01-18