2012-07-16 19 views
5

Poniżej zapytań HQL dla konkretnego rodzaju zajęćNHibernate .class równowartość w QueryOver

select a from Animal a 
where TYPE(a) in ('Cat', 'Dog') 
and a.sex = 'Male' 
order by a.name 


select a from Animal a 
where a.class in ('Cat', 'Dog') 
and a.sex = 'Male' 
order by a.name 

Im zastanawiasz się tam i ekwiwalent za pomocą QueryOver?

+0

może jest, ale w międzyczasie zawsze możesz ".Where (Projections.eq (" klasa ", ...)' – Firo

Odpowiedz

5

Można użyć GetType metodą wydłużania IsIn QueryOver do osiągnięcia tego celu:

session.QueryOver<Animal>() 
    .Where(a => a.GetType().IsIn(new[] { "Cat", "Dog" }) 
    /* .. etc */ 

Należy użyć wartości dyskryminacyjne, że mapowanie NHibernate zastosowań.

+0

nie działa z powodu tego, że chcę to zrobić, ponieważ chcę rozwiązać problem podana w tym wątku http://stackoverflow.com/questions/11491592/nhibernate-return-a-specific-type-of-union-subclass-in-a-queryover- withinjo – reggieboyYEAH

+0

Czy możesz rozwinąć na "it didn" działa? "Jak wyglądał wygenerowany kod SQL? Czy wystąpił błąd? –

+0

Przepraszam, że w zasadzie to, co się stało, dołączyłem TType1 do TType2 w QueryOver, to nie może wykonać zapytania, nie może rozwiązać typu, który się łączy. – reggieboyYEAH