私のクラスは次のようになります (関連するプロパティのみを含めます)。
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 個の OrderLines のみを取得する分離基準を作成することです。最初の部分は簡単です:
Customer someCustomerObject = ...;
var criteria = DetachedCriteria.For<Order>().Add(Restrictions.Eq("Customer", someCustomerObject);
しかし、上記の基準によって取得された各注文の最初の 10 個のオーダーラインを熱心に取得するように NHibernate に指示するにはどうすればよいでしょうか?
次の例に基づいてフィルターを使用してみました (Nhibernate のドキュメントから取得)。
session.CreateFilter( lazyCollection, "").SetFirstResult(0).SetMaxResults(10).List();
しかしOrder.OrderLines
、メソッドに与えると、CreateFilter
最初にすべてのオーダーラインが取得され、その後、最初の 10 個のオーダーラインが取得されますが、これは私が望むものではありません。NHibernateUtil.Initialize
また、これを役に立たないという呼び出しと組み合わせてみました。
この問題に対して独立した基準を作成するにはどうすればよいですか? または、それが完全に不可能な場合は、コレクション全体を取得せずに、注文ごとに最初の 10 件の結果のみを取得する方法を教えてください。