(NHibernate)如何在fetch上过滤集合

时间:2013-11-06 14:25:30

标签: nhibernate fetch queryover

要求: 我正在尝试查询客户列表。 每个客户都可以包含联系人列表。 只应返回活动的联系人。

代码

Session.QueryOver<Customer>()
    .Fetch(x => x.Contacts.Where(c => c.Active))
    .Eager
    .TransformUsing(new DistinctRootEntityResultTransformer())
    .Future()
    .AsQueryable();

错误: 表达式x.Contacts.Where中无法识别的方法调用(c =&gt; c.Active)

那么,我该如何只过滤活动的联系人呢?

1 个答案:

答案 0 :(得分:1)

您不这样做,因为这样做会在数据库和域模型之间造成不匹配。如果您能够执行此操作,则会在刷新会话时删除非活动联系人。有两个不错的选择:

  1. IEnumerable<Contact>上创建一个返回活动联系人的扩展方法。这使您可以轻松过滤任何一组联系人以仅显示活动的联系人。
  2. 创建仅包含要显示的数据的视图模型。
  3. NHibernate filters也可能是一种选择,但我对它们没有经验。我赞成使用扩展方法。