Допустим, у меня есть следующая структура, переведенная с дискриминатором (таблица в иерархию):NHibernate Linq запрос, где (х => х базовый класс) не получает результирующие объекты
Entity (abstract, no discriminator)
|
Animal (abstract, no discriminator)
/ \
Dog (1) Cat(2)
Если я запрашиваю по этому с использованием Linq to NHibernate:
.Where(x => x.Entity is Animal)
Результаты поиска не получены. При взгляде на сгенерированный запрос я ожидал увидеть:
where type in (1, 2)
Но вместо этого я получил это:
where type='animal'
Животное является абстрактным и даже не имеет дискриминатор, поэтому сгенерированный запрос не имеет смысла.
Копаем немного глубже Я обнаружил, что запрос переводится внутренне в нечто похожее на WHERE x.class=animal
в HQL. Это ошибка в Linq для NHibernate? Или это ожидаемое поведение?
Если я выполняю 'session.Query .ToList()' Я получаю ожидаемый запрос, 'type in (1,2)'. Если я отвечу в вашем ответе, я думаю, что это тоже работает. Проблема заключается только в '.Where (x => x.Entity is Animal)'. Я мог бы сделать. Где (x => session.Query () .Выберите (a => a.Id) .Contains (x.Entity.Id)), но затем вместо простого 'where type in (1,2) 'Я получаю сложный подзапрос' where id in (select id from ...) '. –
AlexDev