从Nhibernate IQueryOver获取Max值

时间:2012-11-30 16:11:30

标签: c# nhibernate fluent-nhibernate

我正在使用一个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;
}

1 个答案:

答案 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;
}