クエリの表現方法
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 の書き方がわかりません。