query left nhibernate criteria subquery

left - nhibernate session createquery



Escribir subconsulta en Criterios de nHibernate (2)

He leído sobre la subconsulta en Criteria, pero todavía no puedo entenderlo correctamente. Aquí estoy tomando un ejemplo y si alguien puede ayudarme a escribirlo mediante la subconsulta será grandioso.

Digamos que tenemos mesa

Employee{EmployeeId.(int),Name(string),Post(string),No_Of_years_working(int)}

Ahora quiero a todos los empleados que son gerentes y que trabajan por menos de 10 años. Sé que podemos obtener el resultado sin usar subconsultas, pero quiero usar la subconsulta solo para comprender cómo funciona en los criterios.

Entonces, cómo puedo escribir Criteria usando subconsulta para obtener esos empleados.


Bueno, el código debería ser algo como esto:

DetachedCriteria dc = DetachedCriteria.For<Employee>() .Add (Subqueries.PropertyIn("EmployeeId", DetachedCriteria.For<Employee>() .SetProjection(Projections.Property("EmployeeId")) .Add(Restrictions.Lt("No_Of_years_working", 10)) .Add(Restrictions.Eq("Post", "Manager")) );

Espero que esto ayude.


Estaba tratando de realizar algo similar a la tarea de Bipul, cuando encontré esta pregunta, así que principalmente obtuve la idea de la respuesta de Bernhardrusch, pero me di cuenta de que sin agregar Projections.projectionList la subconsulta no funcionaba. Así que he decidido soltar algunas líneas de código con la versión final:

Session session; //You get the session according with your app logic //Let''s define first the subquery DetachedCriteria sub = DetachedCriteria.forClass(Employee.class); sub.add( Restrictions.lt("No_Of_years_working", 10) ); sub.add( Restrictions.eq("Post", "Manager") ); sub.setProjection( Projections.projectionList().add( Projections.property("EmployeeId") ) ); //Now the main query Criteria criteria = session.createCriteria(Employee.class); criteria.add( Property.forName("EmployeeId").in(sub) );