扩展实体的 BreezeJS 计数

BreezeJS count of expanded entities

这是通过 EF 提供程序使用 BreezeJS 和 Breeze 控制器。我有几个相关的实体,我们称它们为 Customer,它有一个名为 Orders 的导航 属性,它链接到该客户的一组 Order Entities。

我想在 UI 上显示的是与部分名称搜索相匹配的一组客户的订单计数摘要。我可以通过 returning 所有 Order 对象来做到这一点,但它们是相当大的对象,我真的不想在不需要时 return 100 个。 inlineCount() 方法似乎总是给出顶级实体(客户)的计数,而不是子实体的计数,无论我将它放在语句中的什么位置。

var predicate = breeze.Predicate.create('displayName', 'contains', partialName);         
return this.entityQuery.from('Customers')
        .where(predicate)
        .orderBy('displayName')
        .using(this.manager)
        .expand('Orders')
        .execute();

文档建议您可以以某种方式链接扩展,但我还没有找到有效的语法。

理想情况下,我想通过 属性 在名为状态为 0(不完整)的订单上应用订单位置,然后只给我那些匹配订单的数量。即,return 我所有的客户实体,但每个实体都有一个匹配的订单计数(而不是整个订单对象列表和过滤器客户端)。

如果有可能实现,将不胜感激任何指向正确方向的指示。我目前的想法是,我必须在服务器端控制器上创建一个自定义方法并在那里完成工作,但在我假设 OData 可以支持什么之前,我想我会在这里检查一些确认。

到目前为止,这是我最好的方法(如果有更好的方法,也许有人可以纠正我)。

在服务器上,添加这个方法:

  public IQueryable<object> CustomerSummaries()
  {
     return Context.Customers.Select(p => new
                                          {
                                             Customer = p,
                                             ActiveOrderCount = p.Orders.Count(o => o.Status == 1)
                                          });
  }

然后在客户端:

     var predicate = breeze.Predicate.create('customer.displayName', 'contains', partialName);

     return this.entityQuery.from('CustomerSummaries')
        .where(predicate)
        .using(this.manager)
        .execute();