У меня есть следующий запрос в HQL:Противоречивые результаты между NHibernate запросов и желаемых результатов
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>();
}
Когда я запускаю этот запрос с NHibernate, он возвращает 2 строки.
Если я запустить сценарий SQL, генерируемый NH в браузере базы данных (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));
У меня есть 3 строки, которая является то, что я должен иметь.
Почему мои результаты отличаются?
Заранее спасибо
Майк
К сожалению, это не работает:/Я пробовал несколько комбинаций с кавычками без, но я не получаю правильных результатов ... – Mike
Майк, не могли бы вы использовать LIKE% Male% вместо знак равно Просто чтобы убедиться, что NHibernate не слишком сообразителен? – rebelliard
Пол - это перечисление. Я добавил соглашение в FluentNhibernate, которое хранит значение перечисления вместо имени. Итак, у меня есть Male = 0 и Female = 1. Но я все равно получаю те же результаты. Проблема не в этом, так как забытый игрок имеет тот же пол, что и два возвращенных игрока ... – Mike