NHibernate Criteria Query:处理分区

时间:2013-03-01 22:27:18

标签: c# sql nhibernate nhibernate-criteria

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

背景

1.两个对象模型:

项目,用户

2.Model属性:

项目:

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

用户:

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

3.Relationship

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

我想做什么:

  1. 按User.ID分组项目

  2. 按UpdateDate排序

  3. 从1& 2

  4. 获取每个组的第一条记录
  5. 检查此项目的状态!='已删除'

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

  7. 问题:

    1. 我目前仅限于使用Criteria
    2. 我知道如何进行简单的查询,例如:

      ICriteria projectCriteria = Session.CreateCriteria();

      projectCriteria.Add(Restrictions.Not(“Status”,“Deleted”));

      projectCriteria.AddOrder(Order.Desc( “UpdateDate”));

    3. 但使用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')
      

1 个答案:

答案 0 :(得分:1)

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

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

使用返回对象列表

的Projections.SqlProjection对db进行第一步查询

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

相关问题