1

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

代码

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

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

那么,如何仅过滤活动联系人?

4

1 回答 1

1

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

  1. 创建一个IEnumerable<Contact>返回活动联系人的扩展方法。这使您可以轻松过滤任何一组联系人以仅显示活动联系人。
  2. 创建一个仅包含您要显示的数据的视图模型。

NHibernate 过滤器也可能是一种选择,但我没有使用它们的经验。我喜欢使用扩展方法。

于 2013-11-06T15:19:04.000 回答