使用NHibernate QueryOver筛选和投影关联
假设您有一个与此类似的实体:使用NHibernate QueryOver筛选和投影关联,nhibernate,queryover,Nhibernate,Queryover,假设您有一个与此类似的实体: public class Mailinglist { public virtual Guid Id { get; set; } public virtual ICollection<Subscriber> Subscribers { get; set; } } 这显然是不对的,因为我得到的列表包含了100个对Mailinglist的引用。不过,生成的SQL看起来相当不错,让我觉得我只需要显式地添加一个投影/转换 我一直试图找到一些相关文
public class Mailinglist
{
public virtual Guid Id { get; set; }
public virtual ICollection<Subscriber> Subscribers { get; set; }
}
这显然是不对的,因为我得到的列表包含了100个对Mailinglist
的引用。不过,生成的SQL看起来相当不错,让我觉得我只需要显式地添加一个投影/转换
我一直试图找到一些相关文档来帮助我,但似乎找不到任何解决此类查询的方法。有人能给我提示一下吗?var subquery=QueryOver.Of()
var subquery = QueryOver.Of<Mailinglist>()
.Where(m => m.Id == myMailinglistId)
.JoinQueryOver(m => m.Subscribers, () => subscriber)
.Select(m => subscriber.Id);
var subscribers = session.QueryOver<Subscriber>()
.WithSubquery.WhereProperty(s => s.Id).In(subquery)
.Take(100)
.List();
.Where(m=>m.Id==myMailinglistId)
.JoinQueryOver(m=>m.subscriber,()=>subscriber)
.Select(m=>subscriber.Id);
var subscribers=session.QueryOver()
.WithSubquery.WhereProperty(s=>s.Id).In(子查询)
.拿(100)
.List();
HQL不更容易阅读吗
未进行测试,但测试内容如下:
Query query =
session.createQuery("from Mailinglist m where m.subscriber = :code ")
.SetMaxResults(100)
.setParameter("code", "%john%");
List list = query.list();
setMaxResults应转换为T-SQL“选择前100名…”订阅者没有FK到邮件列表?为什么不能只做一个查询,其中(s=>s.MailingListId==myMailinglistId和…).Take(100).List()?订阅者是否有对邮件列表的反向引用?
subscriber
和mailinglist
之间的关系是多对多的。目前,Subscriber
没有任何back引用,但我认为在其上添加Mailinglists
集合属性没有任何问题。
Query query =
session.createQuery("from Mailinglist m where m.subscriber = :code ")
.SetMaxResults(100)
.setParameter("code", "%john%");
List list = query.list();