2012-11-30 43 views
2

我正在使用一个有返回IQuery对象的方法的NHibernate项目。 我想找到具有特定颜色的最古老的汽车。从Nhibernate获取最大值IQueryOver

目前只有当您指定颜色正确(或根本不指定颜色)时才会返回最旧的汽车。

我大致可以看到我做错了什么(我正在为整个表格获取maxAge,然后将其作为对现有IQueryOver的限制进行添加)。

如何更改代码以仅为现有IQueryOver获取最大年龄?

private IQueryOver GetFilteredQuery() 
{ 
    var query = Session.QueryOver<Car>(); 

    if (this.Colour != nulI) 
    { 
     query.Where(x => x.Colour == this.Colour)); 
    } 

    if (this.GetOldestCar == true) 
    { 
     QueryOver<Car> maxAge= QueryOver.Of<Car>() 
      .SelectList(c => c.SelectMax(x => x.Age)); 

     query.Where(Subqueries.WhereProperty<Car>(i => i.Age).Eq(maxAge)); 
    } 

    return query; 
} 

回答

4

为了得到最悠久的汽车,你可以尝试:

var query = Session.QueryOver<Car>().OrderBy(x=>x.Age).Desc().Take(1); 

这将导致:

private IQueryOver GetFilteredQuery() 
{ 
    var query = Session.QueryOver<Car>(); 

    if (this.Colour != null) 
    { 
     query.Where(x => x.Colour == this.Colour)); 
    } 

    if (this.GetOldestCar) 
    { 
     query.OrderBy(x=>x.Age).Desc().Take(1) 
    } 

    return query; 
} 
+0

谢谢,只是改变了最后,如果子句 query.OrderBy(X => x.Age).Desc()取(1)。 它工作的一种享受。 – openshac