【发布时间】:2013-03-01 22:27:18
【问题描述】:
我刚开始学习 NHibernate Criteria 查询。现在进入这个连接表和分区问题。
背景:
1.两个对象模型:
项目、用户
2.模型属性:
项目:
- ID(整数)
- UpdateDate(日期时间)
- 状态(字符串)
- 用户(用户)
用户:
- ID(整数)
- 名称(字符串)
3.关系
用户一次更新一个项目,每次更新后,将使用当前的UpdateDate、Status、User创建一个新的项目实例。
我想做的事:
按 User.ID 对项目进行分组
按更新日期排序
从1&2获取每个Group的第一条记录
检查此项目的状态是否!=“已删除”
如果4次通过,则将此项目放入结果列表中
问题:
- 我现在只能使用 Criteria
-
我知道如何进行简单的查询,例如:
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')
【问题讨论】:
-
如果您编写要翻译的 sql 查询,我可以提供一个示例
-
SQL 已添加。感谢您的关注。
标签: c# sql nhibernate nhibernate-criteria