想象一下以下表格:
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/