NHibernate Criteria Query:处理分区



我刚开始学习NHibernate标准查询。现在开始讨论连接表和分区问题。

背景:

1。两个对象模型:

项目,用户

2。模型属性:

项目:

  • ID (int)
  • UpdateDate (DateTime)
  • 状态(字符串)
  • 用户(用户)

用户:

  • ID (int)
  • 名称(字符串)

3。关系

用户一次更新一个项目,每次更新后,将创建一个具有当前UpdateDate, Status, user的新项目实例。

我想做的:

  1. 按用户对项目进行分组。ID

  2. Order by UpdateDate

  3. 从1&2中获取每个组的第一条记录

  4. 检查这个项目的Status != 'Deleted'

  5. 如果4通过,则将此项目放入结果列表

问题:

  1. 我现在被限制使用标准
  2. 我知道如何做简单的查询,例如:

    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

第二步迭代该列表以提取所需的

最新更新