I have this problem: When I try to implement a comprehensive Iyende search found at: http://ayende.com/Blog/archive/2006/12/07/ComplexSearchingQueryingWithNHibernate.aspx with the object graph: Person: M: 1 Address: M: 1 Street: M: 1 Location: M: 1 Country I get the following error: NHibernate.QueryException: I cannot use subqueries by criteria without projection. I'm doing it:
public List<Person> Find() { DetachedCriteria query = DetachedCriteria.For<Person>(); AddAddressQuery(query); return personRepository.Find(query); } private void AddAddressQuery(DetachedCriteria query) { DetachedCriteria addressQuery = null; if (!String.IsNullOrEmpty(SearchParams.HouseNumer)) { addresaQuery = DetachedCriteria.For<Address>(); addresaQuery.Add(Restrictions.Eq("HouseNumer", SearchParams.HouseNumer)); } this.AddStreetQuery(ref addressQuery); if (addressQuery != null) { query.CreateCriteria("Address1", "address1").Add(Subqueries.Exists(addressQuery)); } } private void AddStreetQuery(ref DetachedCriteria query) { DetachedCriteria streetQuery = null; if (this.SearchParams.StreetId.HasValue) { streetQuery = DetachedCriteria.For<Street>(); streetQuery .Add( Restrictions.Eq("Id", this.SearchParams.StreetId.Value)); } if (streetQuery != null) { query = query ?? Query.CreateCriteria("Address1"); query.CreateCriteria("Street", "street").Add(Subqueries.Exists(streetQuery )); } }
What am I doing wrong? Please, help
- .
addressQuery, DetachedCriteria, , . , SQL, :
... EXISTS(SELECT FROM Address WHERE HouseNumber = @HouseNumber)
... SQL, select ( a.k.a).
SetProjection .