我刚开始学习NHibernate标准查询。现在开始讨论连接表和分区问题。
背景:1。两个对象模型:
项目,用户
2。模型属性:
项目:
- ID (int)
- UpdateDate (DateTime)
- 状态(字符串) 用户(用户)
用户:
- ID (int)
- 名称(字符串)
3。关系
用户一次更新一个项目,每次更新后,将创建一个具有当前UpdateDate, Status, user的新项目实例。
我想做的:
按用户对项目进行分组。ID
Order by UpdateDate
从1&2中获取每个组的第一条记录
检查这个项目的Status != 'Deleted'
如果4通过,则将此项目放入结果列表
问题:
- 我现在被限制使用标准
我知道如何做简单的查询,例如:
iccriteria projectCriteria = Session.CreateCriteria();
projectCriteria.Add(限制。("状态","删除"));
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')
我认为Nhibernate不支持Row_Number()分区,但你可以使用Projections.SqlProjection
你可以处理你的查询分为两个不同的步骤:
第一步查询数据库使用投影。返回对象列表的SqlProjection
第二步迭代该列表以提取所需的