假设我在帖子和标签之间有多对多关系(使用 ActiveRecord 属性 HasAndBelongsToMany)(更改域名对象名称以保护无辜者),我想要一个类似的方法
FindAllPostByTags(IList<Tag> 标签)返回参数中包含所有(不仅仅是部分)标签的所有帖子。我可以通过 NHibernate Expressions 或 HQL 来实现这一点吗?我搜索了 HQL 文档,但找不到任何适合我需要的东西。我希望我只是错过了一些明显的东西!
假设我在帖子和标签之间有多对多关系(使用 ActiveRecord 属性 HasAndBelongsToMany)(更改域名对象名称以保护无辜者),我想要一个类似的方法
FindAllPostByTags(IList<Tag> 标签)返回参数中包含所有(不仅仅是部分)标签的所有帖子。我可以通过 NHibernate Expressions 或 HQL 来实现这一点吗?我搜索了 HQL 文档,但找不到任何适合我需要的东西。我希望我只是错过了一些明显的东西!
你也可以只使用一个IN
语句
DetachedCriteria query = DetachedCriteria.For<Post>();
query.CreateCriteria("Post").Add(Expression.In("TagName", string.Join(",",tags.ToArray()) );
我还没有编译,所以它可能有错误
我现在没有安装 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();
我只是遇到了同样的问题并尝试阅读 HQL 文档,但是 NHibernate 中似乎没有实现某些功能(例如,带有关键字)
我最终得到了这种解决方案:
选择 p 发件人 加入 p.Tags tag1 加入 p.Tags tag2 在哪里 标签1.Id = 1 tag2.Id = 2
意思是,使用 join 为每个标签动态构建 HQL,然后在 WHERE 子句中进行选择。这对我有用。我尝试使用 DetachedCriteria 做同样的事情,但在尝试多次加入表格时遇到了麻烦。