我正在使用一个NHibernate项目,该项目有一个返回IQuery对象的方法。 我想找到最具特色的汽车。
目前,只有当您正确指定颜色(或根本不指定颜色)时,它才会返回最旧的汽车。
我可以大致看到我做错了什么(我得到了整个表的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;
}
答案 0 :(得分: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;
}