2

IQuery オブジェクトを返すメソッドを持つ NHibernate プロジェクトを使用しています。特定の色の最も古い車を見つけたいです。

現時点では、色を正しく指定した (またはまったく指定しなかった) 場合にのみ、最も古い車が返されます。

私が間違っていることを大まかに見ることができます (テーブル全体の 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 に答える