C# 使用Nhibernate筛选与聚合根一起返回的子集合

C# 使用Nhibernate筛选与聚合根一起返回的子集合,c#,nhibernate,C#,Nhibernate,我尝试在使用Nhibernate加载聚合根的子集合时对其进行筛选。将客户的所有已发货订单加载到客户。这可能吗?您可以公开在映射中过滤的属性,如下所示: <bag name="shippedOrders" ... where="Status == 'Shipped'" > <key column="CustomerId" /> <one-to-many class="Order" /> </bag> 您可以从另一个角度看它——为客户加载

我尝试在使用Nhibernate加载聚合根的子集合时对其进行筛选。将客户的所有已发货订单加载到客户。这可能吗?

您可以公开在映射中过滤的属性,如下所示:

<bag name="shippedOrders" ... where="Status == 'Shipped'" >
   <key column="CustomerId" />
   <one-to-many class="Order" />
</bag>

您可以从另一个角度看它——为客户加载所有已发货订单

session.CreateCriteria( typeOf(Order) )
    .Add( Restrictions.Eq("Shipped", shippedStatus ) )
    .Add( Restrictions.Eq("Customer", requiredCustomer) )
    .List<Order>();
session.CreateCriteria(typeOf(Order))
.Add(限制.Eq(“已装运”,发货状态))
.Add(限制.Eq(“客户”,requiredCustomer))
.List();

您也可以使用HQL使用session.Filter(customer.Orders,“where this.Status==‘Shipped’”)来完成此操作

ICriteria crit=session.CreateCriteria(typeof(Customer));
crit.CreateAlias(“订单”、“o”);
标准添加(Expression.Eq(“o.Status”,shippedStatus));
标准添加(Expression.Eq(“Id”,customerId));
返回crit.UniqueResult();

类似的东西。

这将涉及两次加载订单,即使它们只有不同的实体
session.CreateCriteria( typeOf(Order) )
    .Add( Restrictions.Eq("Shipped", shippedStatus ) )
    .Add( Restrictions.Eq("Customer", requiredCustomer) )
    .List<Order>();
ICriteria crit = session.CreateCriteria (typeof(Customer));

crit.CreateAlias ("Orders", "o");
crit.Add (Expression.Eq ("o.Status", shippedStatus));
crit.Add (Expression.Eq ("Id", customerId));

return crit.UniqueResult <Customer>();