我刚开始学习 NHibernate Criteria 查询。现在进入这个连接表和分区问题。
背景:
1.两个对象模型:
项目,用户
2.模型属性:
项目:
- 编号(整数)
- 更新日期(日期时间)
- 状态(字符串)
- 用户(用户)
用户:
- 编号(整数)
- 名称(字符串)
3.关系
用户一次更新一个项目,每次更新后,将使用当前的 UpdateDate、Status、User 创建一个新的项目实例。
我想做的事:
按 User.ID 对项目进行分组
按更新日期排序
从 1&2 获取每个 Group 的第一条记录
检查此项目的状态!=“已删除”
如果 4 次通过,则将此项目放入结果列表
问题:
- 我现在只能使用 Criteria
我知道如何进行简单的查询,例如:
ICriteria projectCriteria = Session.CreateCriteria();
projectCriteria.Add(Restrictions.Not("状态", "已删除"));
projectCriteria.AddOrder(Order.Desc("UpdateDate"));
但是很难使用 Criteria API 进行分区和表连接。
想知道是否有人知道如何做到这一点可以帮助我。
谢谢!
我在数据库中尝试的 SQL 查询:
WITH PartitionProject AS
(
SELECT *, ROW_NUMBER() OVER(PARTITION BY UserFk ORDER BY UpdateDate DESC) AS RowNumber
FROM Projects
)
SELECT *
FROM PartitionProject
WHERE RowNumber = 1 and (ProjectStatus != 'Deleted')