如何表达查询
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 语法中?
因此,我希望从 items 表中获取每个名称的最大日期记录。
表中的每个项目对应于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()
来表示两个实体(在我的情况下为 ItemLatest 和 ItemEnity)之间的连接,这两个实体之间没有相互引用的关系属性。