3

假设我在帖子和标签之间有多对多关系(使用 ActiveRecord 属性 HasAndBelongsToMany)(更改域名对象名称以保护无辜者),我想要一个类似的方法

FindAllPostByTags(IList<Tag> 标签)
返回参数中包含所有(不仅仅是部分)标签的所有帖子。我可以通过 NHibernate Expressions 或 HQL 来实现这一点吗?我搜索了 HQL 文档,但找不到任何适合我需要的东西。我希望我只是错过了一些明显的东西!

4

3 回答 3

2

你也可以只使用一个IN语句

DetachedCriteria query = DetachedCriteria.For<Post>();
query.CreateCriteria("Post").Add(Expression.In("TagName",  string.Join(",",tags.ToArray()) );

我还没有编译,所以它可能有错误

于 2008-10-02T10:41:41.527 回答
0

我现在没有安装 Castle 的系统,所以我没有测试或编译它,但下面的代码应该可以满足您的需求。

Junction c = Expression.Conjunction();
foreach(Tag t in tags)
    c = c.Add( Expression.Eq("Tag", t);

return sess.CreateCriteria(typeof(Post)).Add(c).List();
于 2008-09-24T22:33:23.670 回答
0

我只是遇到了同样的问题并尝试阅读 HQL 文档,但是 NHibernate 中似乎没有实现某些功能(例如,带有关键字)

我最终得到了这种解决方案:

选择 p
发件人
加入 p.Tags tag1
加入 p.Tags tag2
在哪里
    标签1.Id = 1
    tag2.Id = 2

意思是,使用 join 为每个标签动态构建 HQL,然后在 WHERE 子句中进行选择。这对我有用。我尝试使用 DetachedCriteria 做同样的事情,但在尝试多次加入表格时遇到了麻烦。

于 2008-11-06T14:53:03.273 回答