BreezeJS扩展实体计数

BreezeJS扩展实体计数,breeze,Breeze,这是使用BreezeJS和Breeze控制器连接到EF提供者。我有几个相关的实体,让我们称它们为Customer,它有一个名为Orders的导航属性,该属性链接到该客户的一组订单实体 我想在UI上显示的是一组匹配部分名称搜索的客户的订单数量摘要。我可以通过返回所有Order对象来实现这一点,但它们都是相当大的对象,我不想在不需要的时候返回100个。inlineCount()方法似乎总是给出顶级实体(客户)的计数,而不是子实体的计数,无论我将其放在语句中的什么位置 var predicate =

这是使用BreezeJS和Breeze控制器连接到EF提供者。我有几个相关的实体,让我们称它们为Customer,它有一个名为Orders的导航属性,该属性链接到该客户的一组订单实体

我想在UI上显示的是一组匹配部分名称搜索的客户的订单数量摘要。我可以通过返回所有Order对象来实现这一点,但它们都是相当大的对象,我不想在不需要的时候返回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();
文档建议您可以以某种方式链接expand,但我还没有找到有效的语法

理想情况下,我希望通过一个名为Status of say 0(complete)的属性对订单应用where,然后只给出匹配订单的计数。即,返回所有客户实体,但每个实体都有一个匹配的订单计数(而不是整个订单对象列表和客户端过滤器)


如果有可能的话,我会很感激任何指向正确方向的指点。我目前的想法是,我必须在服务器端控制器上创建一个自定义方法并在那里进行工作,但在我假设OData可以支持什么之前,我想我应该在这里检查一下以获得一些确认。

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

在服务器上,添加以下方法:

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

显然,一个选项是获取与第一个谓词匹配的所有客户,然后在客户端对具有匹配customer.id和状态为0的所有订单实体执行另一个查询。到目前为止,这证明是相当缓慢的,虽然有很多客户匹配的名称,所以寻找建议的选项
     var predicate = breeze.Predicate.create('customer.displayName', 'contains', partialName);

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