gpt4 book ai didi

nhibernate - 使用 NHibernate 按计数分组

转载 作者:行者123 更新时间:2023-12-03 12:05:13 25 4
gpt4 key购买 nike

鉴于以下表格:

资源:
身份证号码,
名称 varchar(100),
地址 varchar(500),
城市 varchar(100),
等等。

资源 View :
身份证号,
资源 ID 整数,
用户 ID 整数,
查看日期日期时间

每次查看资源时,都会为该用户在 ResourceView 表中添加一个条目。
下面是对应的类:

public class Resource
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string City { get; set; }
public IList<ResourceView> ResourceViews { get; set; } // simplified
etc. -- class simplified for question
}
public class ResourceView {
public int Id { get; set; }
public Resource Resource { get; set; }
public User User { get; set; }
public DateTime ViewDate { get; set; }
}

使用 NHibernate,如何按类似于以下 sql 检索的计数顺序获取前 5 个最常查看的资源:

从 [资源] 中选择 *
其中 ID 在 (
从资源 View 中选择前 5 个资源 ID
其中用户 ID = 3
分组依据(资源 ID)
按计数排序(*) 降序
)

如果可以使用 Criteria API 而不是 hql 来完成,则加分。

最佳答案

尝试这个:

DetachedCriteria dcriteria = DetachedCriteria.For<ResourceView>("rv")
.Add(Restrictions.Eq("userId", 3))
.SetProjection(Projections.GroupProperty("rv.PostID"))
.AddOrder(Order.Desc(Projections.Count("rv.Id")))
.SetMaxResults(5);

var results = NHibernateSessionManager.Session.CreateCriteria<Resource>("r")
.Add(Subqueries.PropertyIn("r.Id", dcriteria))
.List<Resource>();

生成的 SQL 看起来与您的问题中的 SQL 完全一样。因此,我相信这就是您要寻找的。

关于nhibernate - 使用 NHibernate 按计数分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2308611/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com