nhibernate - 使用 nHibernate 分组和计数

标签 nhibernate count group-by

想象一下以下表格:

Tag (TagId, Label)

Post (PostId, Title, Content)

User (UserId, Name)

UserPostTag (Id, UserId, PostId, TagId)



对于一个帖子,多个用户可以添加一个或多个标签。

我想通过 nHibernate 获取帖子的标签列表,以及每个标签的数量。

例子或结果:
Tag(id1, label1), 7

Tag(id2, label2), 5

Tag(id3, label3), 2

我知道如何获取帖子的标签列表:
IList<Tag> tagList = session.CreateCriteria<Tag>()
 .Add(Subqueries.PropertyIn("TagId",
     DetachedCriteria.For<UserPostTag>()
         .Add(Restrictions.Eq("Post.PostId", 17))
         .SetProjection(Projections.Property("Tag.TagId"))
     ))
     .List<Tag>(); 

你能帮我么 ?

非常感谢 !

对不起我的英语不好 ...

真挚地,

安托万

最佳答案

如果我是对的,请像这样创建 HQL 查询:

@"SELECT new Tag(tag.Id, tag.Label), count(cloud.User)
FROM UserPostTag cloud 
    JOIN cloud.Tag tag
WHERE cloud.Post.Id = :postId
GROUP BY tag.Id, tag.Label"

在 CreateQuery 调用中输入这个,只有当你在 Tag 上有一个接受一个 id 和一个标签的构造函数时它才起作用。 (不要忘记设置 postId 参数。)

我相信这会返回一个带有标签和列表的列表。

更新:如果这不起作用,您可以创建一个具有标签和计数的新类 TagCount,并将选择语法更改为如下所示:
SELECT new TagCount(tag.Id, tag.Label, count(cloud.User))

(免责声明:我没有尝试这个。)

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

相关文章:

MySQL IFNULL 不返回默认值

r - dplyr:按组减去与给定条件匹配的值

sql - 如何使用 'must be an aggregate expression or appear in GROUP BY clause' 子句修复 'as'

c# - 自动刷新数据到数据库

mysql - 从两个表中统计,并按照存在的SQL个数排序

c# - NHibernate 和奇数 "Session is Closed!"错误

python - 按三列分组并创建表(最好的 awk)

mysql - SQL WHERE 与乘法 JOIN 和 GROUP BY

sql - 流利的 NHibernate : How to create a clustered index on a Many-to-Many Join Table?

database - ORM 和数据库约束