0

クエリの表現方法

    Select * from
        (select name, Max(date) as date from items group by name) as latest
    inner join items as i
        on i.name=latest.name and i.date = latest.date

NHibernate の QueryOver 構文で?

その結果、項目テーブルから各名前の最大日付を含むレコードを取得することを期待しています。

表の各項目はItemEnityクラスに対応しています。

[Class(Table = "items")]
public class ItemEnity
{
    [Id(Name = "Id")]
    [Generator(1, Class = "native")]
    public virtual long Id { get; set; }

    [Property(NotNull = true)]
    public virtual string Name { get; set; }

    [Property(NotNull = true)]
    public virtual DateTime Date { get; set; }

    // other columns ... 
}

サブクエリを強く型付けされた形式で表現することができました:

public class ItemLatest
{
    public string Name { get; set; }
    public DateTime Date { get; set; }
}

// ...

ItemLatest latest = null;

var subquery = QueryOver.Of<ItemEntity>().SelectList(list => list
    .SelectGroup(i => i.Name).WithAlias(() => latest.Name)
    .SelectMax(i => i.Date).WithAlias(() => latest.Date))
    .TransformUsing(Transformers.AliasToBean<ItemLatest>());

var result = subquery.GetExecutableQueryOver(session).List<ItemLatest>();

JoinQueryOver()しかし、相互に参照する関係プロパティを持たない 2 つのエンティティ (私の場合は ItemLatest と ItemEnity) 間の接続を表現する方法が見つからないため、join の書き方がわかりません。

4

1 に答える 1