2010-07-28 8 views
1

J'ai une table GameVersion avec FK (permettant des null) à la table de jeu. Quand je fais cela:LINQ aux entités - jointure gauche avec la condition

GameVersion[] q = (from gv in db.GameVersion.Include("Game") 
         select gv).ToArray(); 

Il fonctionne bien, mais itérer objets GameVersion je peux voir les références null au jeu dans certains dossiers (comme sur le databse), il fonctionne comme jointure gauche.

Cependant, quand je modifie légèrement la requête et ajouter une recherche par nom de jeu

GameVersion[] q = (from gv in db.GameVersion.Include("Game") 
         where gv.Game.DisplayName.Contains("a") 
         select gv).ToArray(); 

Il se comporte tout à coup comme jointure interne (ne sélectionne des références null). Je ne comprends pas très bien ce comportement. Pourquoi cela se passe-t-il et comment puis-je faire fonctionner la requête? Je veux sélectionner toutes les GameVersions, même celles avec Game == null et appliquer une condition sur l'une des colonnes du Jeu.

+0

où gv.Game.DisplayName.Contains ("a") - par définition cela ne s'applique qu'aux jeux qui ne sont pas Nuls. que diriez-vous de où gv.Game.DisplayName.Contains ("a") || gv.Game == null – hawk

Répondre

6

Eh bien, s'il n'y a pas de jeu, il ne peut pas y avoir de nom d'affichage, donc il ne peut pas contenir "a". Si vous voulez également sélectionnez les versions de jeux où il n'y a pas de jeu, vous devez le faire explicitement. Essayez ceci:

GameVersion[] q = (from gv in db.GameVersion.Include("Game") 
        where gv.Game == null || gv.Game.DisplayName.Contains("a") 
        select gv).ToArray(); 
+0

199,514! vous pourriez casser 200k aujourd'hui alors ... – hawk

+0

Yup. Je suis stupide. :) Ça ne fait rien. – PawelRoman

+0

@hawk: Nah, ce ne sera pas aujourd'hui. Demain si j'ai de la chance cependant. –

Questions connexes