Мои занятия выглядят примерно так (я включаю только соответствующие свойства):
public class Order
{
public virtual Customer Customer { get; set; }
public virtual IEnumerable<OrderLine> OrderLines { get; set; }
}
public class OrderLine
{
public virtual string Product { get; set; } // Simplified
}
Теперь я хочу создать отдельный критерий, который выбирает все заказы для данного клиента и одновременно извлекает только первые 10 строк заказов для каждого заказа. Первая часть проста:
Customer someCustomerObject = ...;
var criteria = DetachedCriteria.For<Order>().Add(Restrictions.Eq("Customer", someCustomerObject);
Но как мне поручить NHibernate с нетерпением получать первые 10 строк заказов для каждого заказа, полученного по вышеуказанным критериям?
Я пытался использовать фильтр на основе следующего примера (взятого из документации Nhibernate):
session.CreateFilter( lazyCollection, "").SetFirstResult(0).SetMaxResults(10).List();
Но когда я даю Order.OrderLines
методу CreateFilter
, он сначала извлекает все строки порядка, а затем получает 10 первых строк порядка, а это не то, что мне нужно. Я также пытался объединить это с звонком на NHibernateUtil.Initialize
безрезультатно.
Как мне создать отдельный критерий для этой проблемы? Или, если это не совсем возможно, как получить для каждого заказа только 10 первых результатов без извлечения всей коллекции?