Предположим, у вас есть объект, похожий на этот:
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
, и мне нужно получить список первых 100 подписчиков, соответствующих какому-либо фильтру на Subscriber
свойства.Из-за ограничений производительности и количества данных в базе данных 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 выглядит довольно хорошо, поэтому я думаю, что мне просто нужно явно добавить проекцию / преобразование.
Я пытался найти какую-то соответствующую документацию, чтобы помочь мне в этом, но, похоже, не могу найтивсе, что касается такого рода запросов.Может кто-нибудь намекнуть мне?