2012-07-16 31 views
5

Dưới đây là các truy vấn HQL cho loại hình cụ thể của lớpNhibernate .class tương đương trong 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 tự hỏi là có và tương đương sử dụng QueryOver?

+0

có thể có nhưng trong khi chờ đợi bạn luôn có thể '.Where (Projections.eq (" class ", ...)' – Firo

Trả lời

5

Bạn có thể sử dụng GetType với phương pháp khuyến nông IsIn QueryOver để thực hiện điều này:

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

Bạn nên sử dụng các giá trị phân biệt rằng việc sơ đồ NHibernate của bạn sử dụng.

+0

nó không làm việc btw lý do tôi muốn làm điều này là bởi vì tôi muốn giải quyết một vấn đề được nêu trong chủ đề này http://stackoverflow.com/questions/11491592/nhibernate-return-a-specific-type-of-union-subclass-in-a-queryover-with-join – reggieboyYEAH

+0

bạn có thể mở rộng trên "nó didn' t làm việc?" điều gì đã làm giao diện SQL được tạo ra như thế nào? bạn có nhận được một lỗi? –

+0

Xin lỗi về điều đó, về cơ bản những gì xảy ra là tôi tham gia TType1 để TType2 trong một QueryOver là nó không thể thực hiện truy vấn không thể giải quyết các loại đang được tham gia. – reggieboyYEAH

Các vấn đề liên quan