(NHibernate)如何在获取时筛选集合

(NHibernate)如何在获取时筛选集合,nhibernate,fetch,queryover,Nhibernate,Fetch,Queryover,要求: 我正试图查询客户名单。 每个客户都可以包含联系人列表。 只应返回活动联系人 代码: Session.QueryOver<Customer>() .Fetch(x => x.Contacts.Where(c => c.Active)) .Eager .TransformUsing(new DistinctRootEntityResultTransformer()) .Future() .AsQueryable(); Sess

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

代码

Session.QueryOver<Customer>()
    .Fetch(x => x.Contacts.Where(c => c.Active))
    .Eager
    .TransformUsing(new DistinctRootEntityResultTransformer())
    .Future()
    .AsQueryable();
Session.QueryOver()
.Fetch(x=>x.Contacts.Where(c=>c.Active))
渴望的
.TransformUsing(新的DistinctRootEntityResultTransformer())
.Future()
.AsQueryable();
错误: 表达式x.Contacts.Where(c=>c.Active)中无法识别的方法调用


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

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

  • IEnumerable
    上创建一个可返回活动联系人的扩展方法。这允许您轻松筛选任何一组联系人,以便仅显示活动联系人
  • 创建仅包含要显示的数据的视图模型

  • 也可能是一个选择,但我没有与他们的经验。我喜欢使用扩展方法。

    你不喜欢,因为这样做会在数据库和域模型之间造成不匹配。如果您能够做到这一点,则在刷新会话时将删除非活动联系人。有两个很好的选择:

  • IEnumerable
    上创建一个可返回活动联系人的扩展方法。这允许您轻松筛选任何一组联系人,以便仅显示活动联系人
  • 创建仅包含要显示的数据的视图模型
  • 也可能是一个选择,但我没有与他们的经验。我喜欢使用扩展方法