2

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

1 回答 1

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;
}
于 2012-11-30T16:19:46.087 回答