Write subquery in Criteria of nHibernate

此生再无相见时 提交于 2019-12-09 17:09:24

问题


I've read about subquery in Criteria, but I am still unable to grasp it properly. Here I am taking one example and if somebody can help me write that using subquery it will be great.

Lets say we have table

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

Now I want all the employees who are Managers and working for less than 10 years. I know that we can get the result without using subqueries but I want to use subquery just to understand how it works in criteria.

So, how I can write Criteria using subquery to get those employees.


回答1:


Well - the code should be something like this:

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"))
);

Hope this helps.




回答2:


I was trying to perform something similar to Bipul's task, when I found this question, so I mainly got bernhardrusch's answer idea, but I've realized that without adding the Projections.projectionList the subquery do not work. So I've decided to drop a few lines of code with the final version:

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) ); 


来源:https://stackoverflow.com/questions/2779162/write-subquery-in-criteria-of-nhibernate

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!