我刚开始学习NHibernate Criteria查询。现在进入这个连接表和分区问题。
背景
1.两个对象模型:
项目,用户
2.Model属性:
的项目: 的
用户: 的
3.Relationship
每个用户一次更新一个项目,每次更新后,将使用当前的UpdateDate,Status,User创建一个新的项目实例。
我想做什么:
按User.ID分组项目
按UpdateDate排序
从1& 2
检查此项目的状态!='已删除'
如果4次通过,则将此项目放入结果列表
问题:
我知道如何进行简单的查询,例如:
ICriteria projectCriteria = Session.CreateCriteria();
projectCriteria.Add(Restrictions.Not(“Status”,“Deleted”));
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')
答案 0 :(得分:1)
我认为Nhibernate不支持Row_Number()分区但你可以使用Projections.SqlProjection
您可以通过两个不同的步骤处理您的查询:
使用返回对象列表
的Projections.SqlProjection对db进行第一步查询第二步迭代该列表以提取您需要的内容