如何表达NHibernate的QueryOver语法查询加入NHibernate的子查询(加入多个列)
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
?
因此,我期望从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)之间没有关系属性从一个到另一个的引用之间的连接。
难道你不能在Linq语法中使用'Query()'来编写它吗?它位于'NHibernate.Linq'命名空间 –
不知道要作为Join()方法的“内部”IEnumerable参数传递什么。换句话说,我只有一个由查询生成的IQueryable() –
Lu55