Luk*_*uka 5 nhibernate criteria-api
我有这个问题:当我尝试实现Ayende的复杂搜索时,请访问:http: //ayende.com/Blog/archive/2006/12/07/ComplexSearchingQueryingWithNHibernate.aspx ,对象图:人:M:1地址:M :1街道:M:1地点:M:1国家我收到以下错误:NHibernate.QueryException:无法在没有投影的条件下使用子查询.我这样做:
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 ));
}
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?请帮忙
就像错误消息一样 - 您需要为任何子查询设置投影.
您的变量addressQuery(DetachedCriteria)用作子查询,但它没有投影.当转换为SQL时,查询的相关部分将如下所示:
... EXISTS(SELECT FROM Address WHERE HouseNumber = @HouseNumber)
Run Code Online (Sandbox Code Playgroud)
...这是无效的SQL,因为在select子句中没有指定列(也就是投影).
使用SetProjection指定列.
| 归档时间: |
|
| 查看次数: |
3108 次 |
| 最近记录: |