je la requête suivante dans HQL:résultats incohérents entre NHibernate requêtes et résultats attendus
public IEnumerable<Player> PlayersNotInTeam(Team team)
{
return Session.CreateQuery("from Player p where p.Sex = :teamSex and p.Visible and p.Id not in (select pit.Player from PlayerInTeam as pit join pit.Roster as roster join roster.Team as team where team = :teamId)")
.SetParameter("teamId", team.Id)
.SetParameter("teamSex", team.Sex)
.Enumerable<Player>();
}
Quand je lance cette requête avec NHibernate, il retournera 2 lignes.
Si je lance le script SQL généré par NH dans mon navigateur de base de données (SQLite Explorer):
select player0_.Id as Id26_, player0_.Sex as Sex26_, player0_.FirstName as FirstName26_, player0_.LastName as LastName26_, player0_.DefaultNumber as DefaultN5_26_, player0_.Visible as Visible26_, player0_.DefaultPosition_id as DefaultP7_26_
from Players player0_
where player0_.Sex='Male'
and player0_.Visible=1
and (player0_.Id not in
(select playerinte1_.Player_id
from "PlayerInTeam" playerinte1_
inner join "Roster" roster2_ on playerinte1_.Roster_id=roster2_.Id
inner join Teams team3_ on roster2_.Team_id=team3_.Id,
Players player4_
where playerinte1_.Player_id=player4_.Id
and team3_.Id=2));
J'ai 3 lignes, ce qui est ce que je devrais avoir.
Pourquoi mes résultats sont-ils différents?
Merci à l'avance
Mike
Malheureusement cela ne fonctionne pas non plus:/J'ai essayé plusieurs combinaisons de guillemets, sans, mais je n'obtiens pas les résultats corrects ... – Mike
Mike, pourriez-vous essayer d'utiliser un LIKE% Male% au lieu d'un '='? Juste pour s'assurer que NHibernate n'est pas trop intelligent à propos des choses? – rebelliard
Le sexe est une énumération. J'ai ajouté une convention dans FluentNhibernate qui stocke la valeur de l'enum au lieu du nom. J'ai donc Male = 0 et Female = 1. Mais j'ai toujours les mêmes résultats. Le problème n'est pas là, car le joueur oublié a le même sexe que les 2 joueurs retournés ... – Mike