1

我刚开始学习 NHibernate Criteria 查询。现在进入这个连接表和分区问题。

背景:

1.两个对象模型:

项目,用户

2.模型属性:

项目:

  • 编号(整数)
  • 更新日期(日期时间)
  • 状态(字符串)
  • 用户(用户)

用户:

  • 编号(整数)
  • 名称(字符串)

3.关系

用户一次更新一个项目,每次更新后,将使用当前的 UpdateDate、Status、User 创建一个新的项目实例。

我想做的事:

  1. 按 User.ID 对项目进行分组

  2. 按更新日期排序

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

  4. 检查此项目的状态!=“已删除”

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

问题:

  1. 我现在只能使用 Criteria
  2. 我知道如何进行简单的查询,例如:

    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')
4

1 回答 1

2

我认为 Nhibernate 不支持 Row_Number() 分区,但您可以使用Projections.SqlProjection

您可以通过 2 个不同的步骤处理您的查询:

使用返回对象列表的 Projections.SqlProjection 对 db 进行第一步查询

第二步迭代该列表以提取您需要的内容

于 2013-03-02T00:00:47.720 回答