使用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();