gpt4 book ai didi

nhibernate - 使用 NHibernate QueryOver 过滤和投影关联

转载 作者:行者123 更新时间:2023-12-04 02:26:51 24 4
gpt4 key购买 nike

假设您有一个与此类似的实体:

public class Mailinglist
{
public virtual Guid Id { get; set; }
public virtual ICollection<Subscriber> Subscribers { get; set; }
}

实体的 NHibernate 映射如您所料:Id是标识符,Subscribers映射为 <set><many-to-many>引用 Subscriber实体。

现在,我有一个 Mailinglist 的实例并且需要获得与 Subscriber 上的某个过滤器匹配的前 100 个订阅者的列表。特性。由于性能限制和数据库中的数据量,myMailinglist.Subscribers.Where().Take()不是一个选项。因此,我试图为 NHibernate 组合一个查询,它将只获取 100 Subscriber。来自数据库的实例。

我最初的尝试(没有任何过滤)是这样的:

var subscribers = session
.QueryOver<Mailinglist>()
.Where(m => m.Id == myMailinglistId)
.JoinQueryOver(m => m.Subscribers)
.Take(100)
.List();

这显然是不对的,因为我得到的列表包含 100 个对 Mailinglist 的引用我已经知道了。虽然生成的 SQL 看起来很不错,但让我认为我只需要显式添加投影/转换。

我一直在努力寻找一些相关文档来帮助我,但似乎无法找到解决此类查询的任何内容。有人可以提示我吗?

最佳答案

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

关于nhibernate - 使用 NHibernate QueryOver 过滤和投影关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7270197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com